1

我想在 sql server 数据库上开发并使用 MySql 进行生产。

我已经使用 SSMS Diagram 创建了我的数据库,并在我的 ASP.NET MVC 项目中生成了 ADO.NET 实体模型。然后我将 Sql Server 的连接字符串修改为指向 MySql Server,并专门将 MySqlConnection 对象传递给 DbContext。现在我正在尝试执行下面的代码,但它抱怨提供的底层连接不是 .NET Sql Server Connection 类型。

dbContext.CreateDatabase();
4

2 回答 2

1

您必须将 MySql 添加到g 文件的System.Data一部分。web.confi

   <system.data>
            <DbProviderFactories>
                    <clear />
                    <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.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
            </DbProviderFactories>
    </system.data>

请注意,我使用的是 Mysql.Data 库的 6.4.4.0 版本,如果您使用的是其他版本,则需要对其进行更新。

于 2012-05-04T16:41:42.457 回答
1

在 web.config 中,您需要:

  • 为 MySQL 添加提供者工厂(如上所示)
  • 修改您的连接字符串(或创建一个新的),其中 providerName 属性已相应设置(类似于<add name="NorthwindEntities" connectionString="metadata=NorthwindModel;provider=MySQL Data Provider;provider connection string="Data Source=.\SQLExpress;Initial Catalog=Northwind;Integrated Security=True"" providerName="System.Data.EntityClient"/>

除了这些更改之外,您还需要有两个 SSDL 文件 - 一个用于 Sql Server,另一个用于 MySQL。这些文件特定于您使用的商店。他们不仅使用商店理解的类型,而且还有提供者特定的信息(我把它放在{大括号}中,对不起,我不知道我的 Sql 的示例性提供者清单令牌):

<Schema Namespace="NorthwindEFModel.Store" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"
    Provider="{MySQL Data Provider}" ProviderManifestToken="{Provider manifest token}">

我认为如果您先使用代码,您可以省去一些麻烦。您将使用代码(类 + DbContext.OnModelCreating())创建并可能配置您的模型,并让 EF 为您创建数据库。根据您的连接字符串(在这种情况下将是“常规”连接字符串而不是实体连接字符串),它将与 Sql Server 或 MySQL 通信,并相应地创建数据库。

于 2012-05-04T19:30:42.890 回答