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
问题描述
对于我的生活,我无法让我的 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屋!