代码之家  ›  专栏  ›  技术社区  ›  Dusda

使用MySql与实体framework4和代码优先开发CTP

  •  29
  • Dusda  · 技术社区  · 14 年前

    我想我应该试试斯科特·古思里的 latest post 在实体框架4的代码优先开发中。我尝试使用MySql而不是sqlserver。以下是my 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能自动为我生成db。相反,它抛出一个ProviderIncompatibleException,内部异常抱怨nerddiners数据库不存在。

    足够公平;我去为它创建了MySql数据库,只是想看看事情是否可行,然后得到了另一个ProviderIncompatibleException。这次,“提供程序不支持DatabaseExists”。

    3 回复  |  直到 14 年前
        1
  •  26
  •   Robert Koritnik    13 年前

    是的,终于有了一些有趣的地方。

    • 无法创建数据库,必须已存在
    • 它将使用用于将上下文定义为表名的DBSet名称,因此在命名它们时要小心。

    总而言之,路漫漫,但终究会有一天

    另一点需要注意的是,在使用MySQL部署MVC站点时,您最需要的是在web.config中添加一个DataFactory。 (这个答案是通过其他渠道得到的,经过反复琢磨) 只需添加:

      <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“复制为本地”以确保兼容性)。

        2
  •  2
  •   ianhorton    13 年前

        3
  •  2
  •   AlexC    13 年前

    如前所述,连接字符串的名称必须与扩展System.Data.Entity.DbContext的类的名称匹配。

    我发现确保dev box和服务器在版本中有正确的mySQL connector.dll比在webconfig中处理DbFactoryProviders更容易。在project/solution build包中正确打包意味着我只需要连接字符串行,而不需要DbFactoryProviders行,我发现在许多机器上很难一致地工作。

    我需要将mySQL标识符区分大小写的设置从0改为1。如果没有这个设置,EF connected的SQL就找不到存在的表,因为与mySQL创建的固定大小写表相比,我的对象的大小写名称是混合的。