我想我会尝试一下 Scott Guthrie 的 latest post使用 Entity Framework 4 进行代码优先开发。我尝试使用 MySql,而不是使用 Sql Server。以下是我的 web.config 的相关部分(这是一个 Asp.Net MVC 2 应用程序):
<connectionStrings>
<add name="NerdDinners"
connectionString="Server=localhost; Database=NerdDinners; Uid=root; Pwd=;"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
<system.data>
<DbProviderFactories>
<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.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
就像教程一样,我希望 EF4 自动为我生成数据库。相反,它会引发 ProviderIncompatibleException,并带有一个内部异常,提示 NerdDinners 数据库不存在。
很公平;我去为它创建了 MySql 数据库,只是为了看看事情是否可行,并得到了另一个 ProviderIncompatibleException 。这一次,“提供者不支持DatabaseExists”。
我承认,这是我第一次真正深入研究 Entity Framework (我主要使用 Linq to Sql),而且这一切都是在上周才发布的 Code-First CTP 上运行的。也就是说,我在这里做错了什么,还是可以解决的已知问题?
最佳答案
好吧,终于在几个兴趣点上工作了。
- 无法创建数据库,必须已经存在
- 您必须使用 DBContext 名称为每个 DB 竞赛创建一个连接字符串(在上面的示例中,连接字符串必须存在名称为“NerdDinners”),而不仅仅是默认的(否则它将使用 SQL)
- 它将使用您用于定义上下文的 DBSet 名称作为表的名称,因此在命名它们时要小心。
总之,路漫漫其修远兮
**更新 需要注意的另一点是,在使用 MySQL 部署 MVC 站点时,您最喜欢还需要在 web.config 中添加一个 DataFactory。 通常是因为那里的 MySql 连接器和支持的 MySQL 版本不同。 (经过多次挠头后通过其他来源找到的答案) 只需添加:
<system.data>
<DbProviderFactories>
<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.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
作为 web.config 的一个单独部分确保设置您随站点部署的 MySQL.Data.dll 的版本号(“复制为本地”也是一个好主意) MySQL DLL 以确保兼容性。
关于mysql - 将 MySql 与 Entity Framework 4 和 Code-First Development CTP 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3283820/