结合使用MySQL和Entity Framework


269

在Google上找不到与Entity Framework / MySQL相关的任何内容,因此我希望有人对此有所了解。


8
坦白地说,mysql对LINQ的支持是废话!上个星期,我在一些小问题上投入了大量精力:| ...
effkay

1
您是否使用dblinq code.google.com/p/dblinq2007
Sharique

Answers:


193

它已发布-获取适用于.Net v6.5MySQL连接器 -该产品支持[Entity Framework]

我一直在等待,尽管支持是基本的,但适用于大多数数据库交互的基本方案。它还具有基本的Visual Studio集成。

更新 http://dev.mysql.com/downloads/connector/net/ 从6.7版开始,Connector / Net将不再包括用于Visual Studio集成的MySQL。现在,该功能可在单独的名为MySQL for Visual Studio的产品中使用,该产品可使用Windows的MySQL安装程序提供(请参见http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html)。


4
我想我要提到的是最新版本(此处为6.2.2):mysql.com/downloads/connector/net
Brett Ryan 2010年

3
这是否支持EF4和VS2010?我安装了连接器,并尝试在VS2010中添加新连接,但是MySQL没有出现在提供程序列表中
Abhijeet Patel 2010年

1
我对MySQL,EF4和VS2010感到好奇。
Vinicius Rocha

1
如果您有最新的连接器,则应该使用。我刚将产品移至.NET4是因为MySQL实体的支持。这些工具和所有工具都可以正常工作,但是最大的问题是它为实际查询提供了基础支持。有相当与兰巴表达式的几个问题,你不MSSQL碰上
大卫·安德森

1
当然,会有新版本发布。现在支持EF5,版本6.7.4:dev.mysql.com/downloads/connector/net/#downloads此外,自该版本以来,包含MySQL服务器和其他工具的VS插件捆绑在一个软件包中:dev.mysql.com / tech-resources / articles /…
Nullius

22

我固定的链接的编码方式-用户现在可以直接通过点击,而不是要复制/粘贴或选择/ GOTO
坎普ͩ

7
链接不起作用
MüllerDK

2
您可以通过以下链接查看文章: pattersonc.com/blog/2009/04
Andy

如果将MYSQL与EF结合使用会更好还是仍然存在问题?如果SQL Server更可取,谁能确切指出为什么SQL Server更可取,仅仅是因为它与Microsoft是同一家供应商吗?
user3508811


7

这与MS及其他们想要的无关。他们为其他人创建了一个*开放系统来插入“提供者”-postgres和sqlite拥有它-mysql只是滞后...但是,对于那些有兴趣的人来说,好消息是,我也一直在寻找并发现MySql Connector / Net 6.0将会拥有它...您可以在这里查看:

http://www.upfromthesky.com/blog/post/2009/03/24/MySql-Supports-the-Entity-Framework.aspx


1
我想知道当他们说“初始实体框架支持”时,“初始”是什么意思。
塔纳2009年


2

文塔纳

当然,现在已经准备好了一些东西。http://www.devart.com/products.html-尽管它是商业性的(您有30天的IIRC试用期)。他们是靠写作为生的,因此我想它应该是快速而稳定的。我知道真正的大公司正在使用他们的Oracle提供程序,而不是Orace和MS。


感谢您的答复。@Vintana,你可以为MySQL和它的优点,找到dotConnect更多信息,这里devart.com/dotconnect/mysql。为了改善您使用Entity Framework实体的工作,我们提供了用于可视化模型创建的高级工具-Entity Developer devart.com/entitydeveloper
Devart

1

使用连接器.net时要小心,连接器6.6.5有一个错误,它不能用于插入tinyint值作为标识,例如:

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();

您将获得一个Null引用异常:

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(); 不是人p; 所以:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Dave

抱歉,我忘记添加新行,即使我添加新行,错误仍然出现
oware

该错误已在6.8.2版中修复。bugs.mysql.com/bug.php?id=70888 Connector / Net 6.8.3已发布。dev.mysql.com/downloads/connector/net
Der_Meister



0

如果您有兴趣在mono / linux / macos上使用MySql运行Entity Framework,这可能会有所帮助 https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/


如果将MYSQL与EF结合使用会更好还是仍然存在问题?如果SQL Server更可取,谁能确切指出为什么SQL Server更可取,仅仅是因为它与Microsoft是同一家供应商吗?
user3508811

我不确定目前的状况如何,但是由于缺少功能并且整体上不一致,因此我们的体验非常糟糕。MS MSQL绝对是首选,因为Microsoft首先将其自己的堆栈放在首位。
伊戈尔·亚洛沃伊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.