使用Entity Framework和MySQL

268

在谷歌上找不到有关Entity Framework/MySQL的相关信息,希望有人了解。


8
坦白说,MySQL 对 LINQ 的支持太差了!我已经为一些小问题苦恼了一个星期 :| ... - effkay
1
你使用过DBLINQ吗?它可以在http://code.google.com/p/dblinq2007/上找到。 - Sharique
10个回答

192
已经发布了 - 获取MySQL .Net v6.5 连接器 - 它支持[Entity Framework]。 我一直在等待这个,虽然支持很基本,但适用于大多数数据库交互的基本场景。它还具有基本的Visual Studio集成。 更新 http://dev.mysql.com/downloads/connector/net/ 从版本6.7开始,Connector / Net将不再包括MySQL for Visual Studio集成。该功能现在在一个名为MySQL for Visual Studio的单独产品中可用,使用MySQL Installer for Windows即可获得(请参见http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html)。

4
我想提一下,最新版本在这里可以找到(目前为6.2.2):http://www.mysql.com/downloads/connector/net - Brett Ryan
3
这是否支持EF4和VS2010?我安装了连接器并尝试在VS2010中添加新连接,但MySQL未出现在提供程序列表中。 - Abhijeet Patel
1
我对MySQL、EF4和VS2010很感兴趣。 - Vinicius Rocha
1
如果您有最新的连接器,它应该可以。我刚刚将我的产品移植到.NET4,特别是因为MySQL Entity支持。工具和一切都运行良好,但实际查询的底层支持是一个大问题。使用lambda表达式时会遇到很多问题,这些问题在MSSQL中不会出现。 - David Anderson
1
当然,新版本正在推出。现在支持EF5,版本6.7.4:http://dev.mysql.com/downloads/connector/net/#downloads 另外,自此版本以来,VS插件与MySQL服务器和其他工具已经捆绑在一个包中:http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html - Nullius
显示剩余5条评论

21

我修复了那个链接的编码 - 用户现在可以直接点击而不必复制/粘贴或选择/转到。 - kͩeͣmͮpͥ ͩ
7
链接无效。 - MüllerDK
2
您可以通过此链接访问文章:http://pattersonc.com/blog/2009/04/ - Andy White
使用MYSQL和EF有没有变得更好了,还是仍然存在问题?如果SQL Server更可取,有人能够明确地指出为什么SQL Server更可取,只因为它是同一供应商Microsoft吗? - user3508811

10

1
链接无法使用。 - Arjun Vachhani

7

1
我想知道当他们说“Initial Entity Framework support”时,“initial”是什么意思。 - vintana

5

你需要为MySQL提供一个映射提供程序。这是Entity Framework需要的额外内容,以实现其魔力。 这篇博客谈到了除微软提供的映射提供程序之外的其他映射提供程序,但我没有找到任何关于MySQL的提及。


是的,你说得对。我希望现在有一些准备好的东西。 - vintana

2

Vintana,

当然现在有一些已经准备好的东西了。 http://www.devart.com/products.html - 这是商业产品(你可以试用30天)。他们以编写提供程序为生,所以我想它应该很快速和稳定。我知道真正大的公司使用他们的Oracle提供程序而不是Oracle和微软的提供程序。


感谢您的回复。@Vintana,您可以在此链接 http://www.devart.com/dotconnect/mysql/ 中找到更多有关 dotConnect for MySQL 及其优势的信息。我们提供了 Entity Developer 这个高级工具,以便更好地处理 Entity Framework 实体的视觉模型创建工作,详情请查阅 http://www.devart.com/entitydeveloper/。 - Devart

1

使用Connector .net时要小心,Connector 6.6.5存在一个bug,无法将tinyint值作为identity插入,例如:

create table person(
    Id tinyint unsigned primary key auto_increment,
    Name varchar(30)
);
如果您尝试像这样插入一个对象:

Person p;
p = new Person();
p.Name = 'Oware'
context.Person.Add(p);
context.SaveChanges();
您将收到一个空引用异常:
Referencia a objeto no establecida como instancia de un objeto.:
   en MySql.Data.Entity.ListFragment.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.SelectStatement.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.InsertStatement.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.SqlFragment.ToString()
   en MySql.Data.Entity.InsertGenerator.GenerateSQL(DbCommandTree tree)
   en MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
   en System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
   en System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
   en System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
   en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues)
   en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
   en System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   en System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
   en System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   en System.Data.Entity.Internal.InternalContext.SaveChanges()
   en System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   en System.Data.Entity.DbContext.SaveChanges()

直到现在我还没有找到解决方案,我不得不将我的tinyint身份更改为unsigned int身份,这解决了问题,但这不是正确的解决方案。

如果您使用较旧版本的Connector.net(我使用的是6.4.4),则不会出现此问题。

如果有人知道解决方案,请与我联系。

干杯!

Oware


错误是因为 p 为空而引发的。您必须先创建一个新的空对象实例。 即, Person p = new Person(); 而不是 Person p;因此: Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges(); - Dave
抱歉,我忘记添加新行了,即使我添加了新行,错误仍然出现。 - oware
该错误已在6.8.2版本中修复。 http://bugs.mysql.com/bug.php?id=70888 Connector/Net 6.8.3已发布。 http://dev.mysql.com/downloads/connector/net/ - Der_Meister

1

0

0

使用MYSQL和EF是否有所改善,还是仍然存在问题?如果SQL Server更可取,是否有人能够明确指出为什么SQL Server更可取,仅仅因为它与同一供应商Microsoft相关? - user3508811
我不确定现在情况如何,但我们曾经因为缺乏功能和整体不一致而遭遇了相当糟糕的经历。MS MSQL 明显更可取,因为微软将其自己的堆栈放在首位。 - Igor Yalovoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,