小编典典

将MySql与Entity Framework 4和Code-First Development CTP结合使用

mysql

我以为我会试验一下Scott Guthrie 关于Entity Framework
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>

就像本教程一样,我希望EF4为我自动生成数据库。相反,它抛出ProviderIncompatibleException,并带有内部异常,抱怨NerdDinners数据库不存在。

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

我承认,这是我第一次真正研究Entity Framework(我主要是对Linq to Sql的坚持),而这一切都在上周发布的Code-First
CTP上运行。也就是说,我在这里做错什么了吗,还是可以解决一个已知问题?


阅读 300

收藏
2020-05-17

共1个答案

小编典典

是的,终于有了一些兴趣点了。

  • 无法创建数据库,必须已经存在
  • 您必须使用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复制为本地”以确保兼容性的一个好主意。

2020-05-17