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

标签 mysql asp.net-mvc entity-framework-4 code-first ctp

我想我会尝试一下 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/

相关文章:

c# - LINQ 内的规范与 EF 4.3

php - 无法用php向mysql输入数据

php - 如何使用 SQL 表行 ID 作为 div 的 ID 来回显 div?

mysql - 有没有办法在 MySql 中模拟 GROUP BY WITH CUBE?

MySQL 删除字符串以及该字符串后面的所有内容

asp.net-mvc - 如何设置默认值 HTML.EditorFor()

html - Razor 页面 (cshtml) 渲染 HTML 标记而不使用经典颜色

c# - 如何使用 model.id 动态生成 HTML 属性值?

c# - InsertOnSubmit 在 DbContext.DbSet 中等效于首先使用 Entity Framework 4 代码

c# - 使用 WCF REST 服务入门工具包检索 EF4 POCO