【问题标题】:Generate ADO.NET Entity Framework using SQL Server 2008 R2 and Connect to MySQL使用 SQL Server 2008 R2 生成 ADO.NET 实体框架并连接到 MySQL
【发布时间】:2012-05-05 03:30:42
【问题描述】:

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

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

dbContext.CreateDatabase();

【问题讨论】:

    标签: entity-framework-4 ado.net


    【解决方案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 通信,并相应地创建数据库。

    【讨论】:

    • 感谢您的帮助。现在首先使用代码。所有其他建议都很好,但没有像 Varchar(Max) 那样工作,而且金钱正在用 MySql 制造问题
    • 我没有使用 Code First,因为我不想手动编写实体类。但我找到了Entity Framework Power Tools,它帮助我从 DB 中对 Code First 实体进行逆向工程
    • 这就是为什么你为 MySql 你有一个单独的 SSDL 使用 MySql 特定类型。如果您使用 CodeFirst 并且对 MySql SSDL 的外观感到好奇,您可以使用 EdmxWriter.WriteEdmx 查看包含所有工件的 EDMX 文件。对于相同的模型,您可以对 MySql 和 Sql Server 执行此操作并比较/差异文件。
    • 你太棒了。非常感谢您分享丰富的知识。
    【解决方案2】:

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

       <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 版本,如果您使用的是其他版本,则需要对其进行更新。

    【讨论】:

    • 我会在这个 tomo 早上试一试,然后告诉你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多