Entity Framework 5.0 code-first with MySQL Connector 6.6.5.0 on .Net 4.5 [英] Entity Framework 5.0 code-first with MySQL Connector 6.6.5.0 on .Net 4.5

查看:23
本文介绍了Entity Framework 5.0 code-first with MySQL Connector 6.6.5.0 on .Net 4.5的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于我的生活,我无法让我的 C# WinApp 与使用 MySql 连接器 6.6.5.0(MySql.Data 参考)和 MySql Entity 6.5 的 MySql 数据库一起使用 Entity Framework 5.0.4.0(MySql.Data.Entity 参考).在 Visual Studio 2012 上使用 .Net Framework 4.5.在撰写本文时,以上版本都是最新的稳定版本.

For the life of me, I can't get my C# WinApp to work with Entity Framework 5.0 with a MySql database using MySql connector 6.6.5.0 (MySql.Data reference) and MySql Entity 6.5.4.0 (MySql.Data.Entity reference). Using .Net Framework 4.5 on Visual Studio 2012. At the time of this writing, the versions above are all the latest stable ones.

这是我在 app.config 上的内容

Here's what I have on app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <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" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MyConnectionName" 
         connectionString="Server=mysql13.myserver.com.br;Database=mydb;User Id=username;Pwd=pa$$w0rd;" 
         providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data">
    </defaultConnectionFactory>
  </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.6.5.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

在代码中

用户类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual List<Permission> Permissions { get; set; }

    public User()
    {
        Permissions = new List<Permission>();
    }
}

public class Permission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class UserContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Permission> Permissions { get; set; }
}

创建新记录

        using (var db = new UserContext())
        {
            Permission permission1 = new Permission() { Name = "Permission 1", Description = "The desc 1" };
            Permission permission2 = new Permission() { Name = "2nd Perm", Description = "Desc2" };
            User user = new User() { Name = "Joao" };
            user.Permissions.Add(permission1);
            user.Permissions.Add(permission2);

            db.Users.Add(user);
            db.SaveChanges();
        }

我在 db.Users.Add(user);

System.InvalidOperationException was unhandled
  HResult=-2146233079
  Message=Failed to set Database.DefaultConnectionFactory to an instance of the 'MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data' type as specified in the application configuration. See inner exception for details.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
       at System.Lazy`1.CreateValue()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Lazy`1.get_Value()
       at System.Data.Entity.Internal.AppConfig.get_DefaultConnectionFactory()
       [removing the rest of the stack]
  InnerException: System.InvalidCastException
       HResult=-2147467262
       Message=Unable to cast object of type 'MySql.Data.MySqlClient.MySqlClientFactory' to type 'System.Data.Entity.Infrastructure.IDbConnectionFactory'.
       Source=EntityFramework
       StackTrace:
            at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
       InnerException: 

我尝试了几种方法,包括在 DbProviderFactories 部分添加 Culture=neutral, PublicKeyToken=c5687fc88969c44d 都无济于事..

I've tried several things, including adding Culture=neutral, PublicKeyToken=c5687fc88969c44d in the DbProviderFactories section to no avail..

我使用 NuGet 包管理器添加了实体框架、MySql 数据连接器和 MySql.Data.Entity.

I added the Entity Framework, MySql Data Connector and MySql.Data.Entity using NuGet Package Manager.

我看过很多其他有类似问题的帖子,但找不到明确的解决方案,尤其是版本控制组合 EF 5 + MySql Connector 6.6.5.0.

I've seen many other posts with a similar problem, but can't find a clear solution, especially with the versioning combo EF 5 + MySql Connector 6.6.5.0.

有人做过这个吗?你能同时发布 app.config 和代码以使其工作吗?

Has anyone made this work? Can you post both the app.config AND the code to make it work?

推荐答案

MySQL Connector 6.6.5 仅支持 Entity Framework 4.3,如前所述 这里.我个人使用过它,到目前为止效果很好.但是,如果您特别需要 Entity Framework 5,则需要使用 MySQL Connector 6.6.7 Beta,它现在支持它,如前所述 此处.不过我还没有尝试过 v 6.6.7.

The MySQL Connector 6.6.5 only supports Entity Framework 4.3 as mentioned here. I have personally used it which worked well so far. However, if you require Entity Framework 5 specifically, you would need to use MySQL Connector 6.6.7 Beta which now supports it as mentioned here. I haven't tried v 6.6.7 though.

更新 1:您可以找到将 EF 4.3 code-first 与 MySQL Connector 6.6 结合使用的博客文章 这里.

Update 1: You can find the blog post of using EF 4.3 code-first with MySQL Connector 6.6 here.

更新 2:使用 EF 4.3 和 MySql Connector 6.6.5 的示例 .NET 4.5 控制台应用程序此处.

Update 2: Sample .NET 4.5 console application using EF 4.3 and MySql Connector 6.6.5 here.

这篇关于Entity Framework 5.0 code-first with MySQL Connector 6.6.5.0 on .Net 4.5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆