【发布时间】:2016-01-11 01:47:22
【问题描述】:
我正在尝试使用 EF6 连接到 MySql 数据库。我看过无数的例子,它们看起来都不同。我看到了很多不同的方式,它们不像连接到我有经验的 Oracle。
public string GetWebinarList()
{
string str = "";
string connectionString = "server=127.0.0.1;port=3306;UserId=user;database=db;password=pwd;CharSet=utf8;Persist Security Info=True;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
using (webinarListDbContext context = new webinarListDbContext())
{
var list = context.WebinarLists.ToString();
str = list;
}
connection.Close();
}
return str;
}
上面实际上看起来更像是通过 ADO.DB 连接而不是 EF6。
上下文定义:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class webinarListDbContext : DbContext
{
public webinarListDbContext() : this("MonkeyFist") { }
public webinarListDbContext(string connStringName) : base(connStringName) { }
static webinarListDbContext()
{
// static constructors are guaranteed to only fire once per application.
// I do this here instead of App_Start so I can avoid including EF
// in my MVC project (I use UnitOfWork/Repository pattern instead)
DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
}
public DbSet<WebinarList> WebinarLists { get; set; }
}
Web.Config:
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
<connectionStrings>
<add name="MonkeyFist" providerName="MySql.Data.MySqlClient" connectionString="server=127.0.0.1;port=3306;UserId=user;database=db;password=pwd;CharSet=utf8;Persist Security Info=True;"/>
</connectionStrings>
</system.data>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
但这是我在检查上下文对象时看到的:
使用 SQLClient 连接与 MySQLClient 相比到底是什么鬼?为什么将 MonkeyFist 设置为数据库?如何将 EF6 连接到 MySQL?
【问题讨论】:
-
您没有将连接信息传递给您的 webinarListDbContext,只是将字符串“MonkeyFist”传递给 DbContext("string")。这将自动创建一个名为“MonkeyFist”的本地数据库。
-
dev.mysql.com/doc/connector-net/en/… ;您需要将连接对象传递给您的上下文,而不是“MonkeyFist”。
-
@Brino,我在该示例中尝试了相同的代码,结果相同。
-
改成了这个,它打开了但什么也没返回,即使结果查询确实如此,
using (webinarListDbContext context = new webinarListDbContext(connectionString)) -
好的,我终于搞定了,发布为答案以获得接受。