将 MySql 与 Entity Framework 4 和代码优先开发 CTP 结合使用

2024-03-07

我想我应该尝试一下 Scott Guthrie 的最新的帖子 http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx使用 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 自动为我生成数据库。相反,它会抛出 ProviderInknownException,并带有一个内部异常,抱怨 NerdDinners 数据库不存在。

很公平;我为其创建了 MySql 数据库,只是为了看看事情是否能正常工作,但却得到了另一个 ProviderIncompleteException。这次,“提供商不支持DatabaseExists”。

我承认,这是我第一次真正深入研究实体框架(我主要坚持使用 Linq to Sql),而且这一切都在上周刚刚发布的 Code-First CTP 上运行。也就是说,我在这里做错了什么,或者有一个可以解决的已知问题吗?


是的,终于让它与一些兴趣点一起工作了。

  • 无法创建数据库,必须已存在
  • 您必须使用 DBContext 名称为每个数据库竞赛创建一个连接字符串(在上面的示例中,连接字符串必须以名称“NerdDinners”存在),而不仅仅是默认的连接字符串(否则它将使用 SQL)
  • 它将使用您用来定义上下文的 DBSet 名称作为表的名称,因此命名它们时要小心。

总而言之,路很长,但最终还是到了

**更新 另一点需要注意的是,当使用 MySQL 部署 MVC 站点时,您很可能还需要将 DataFactory 添加到 web.config 中。 通常是因为 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“复制为本地”也是一个好主意,以确保兼容性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MySql 与 Entity Framework 4 和代码优先开发 CTP 结合使用 的相关文章

随机推荐