将MySql与Entity Framework 4和Code-First Development CTP一起使用

Dus*_*sda 29 mysql asp.net-mvc ctp code-first entity-framework-4

我以为我会尝试使用Scott Guthrie 关于代码优先开发实体框架4 的最新帖子.而不是使用Sql Server,我正在尝试使用MySql.以下是我的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>
Run Code Online (Sandbox Code Playgroud)

就像教程一样,我希望EF4能够自动为我生成数据库.相反,它会抛出一个ProviderIncompatibleException,内部异常抱怨NerdDinners数据库不存在.

很公平; 我去为它创建了MySql数据库只是为了看看事情是否可行,而是获得了另一个ProviderIncompatibleException.这次,"提供商不支持DatabaseExists".

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

Dar*_*ide 26

是的,终于让它与几个兴趣点合作.

  • 无法创建数据库,必须已存在
  • 你必须创建使用的DbContext名称为每个DB大赛的连接字符串(在上面的示例中的ConnectionString必须名为"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>
Run Code Online (Sandbox Code Playgroud)

作为web.config的单独部分,确保设置与站点一起部署的MySQL.Data.dll 的版本号(也是一个好主意"复制为本地"的MySQL DLL以确保兼容性.