Sử dụng MySQL với Entity Framework [đã đóng]


269

Không thể tìm thấy bất cứ điều gì có liên quan về Entity Framework / MySQL trên Google vì vậy tôi hy vọng ai đó biết về nó.


8
Nói một cách thẳng thắn, hỗ trợ mysql cho LINQ là tào lao! Tôi đang đập đầu vào những vấn đề nhỏ trong một tuần qua: | ...
effkay

1
u đã sử dụng dblinq code.google.com/p/dblinq2007 ?
Sharique

Câu trả lời:


193

Nó đã được phát hành - Nhận trình kết nối MySQL cho .Net v6.5 - điều này có hỗ trợ cho [Entity Framework]

Tôi đã chờ đợi điều này toàn bộ thời gian, mặc dù hỗ trợ là cơ bản, hoạt động cho hầu hết các kịch bản cơ bản của tương tác db. Nó cũng có tích hợp Visual Studio cơ bản.

CẬP NHẬT http://dev.mysql.com/doads/connector/net/ Bắt đầu với phiên bản 6.7, Trình kết nối / Net sẽ không còn bao gồm tích hợp MySQL cho Visual Studio. Chức năng đó hiện có sẵn trong một sản phẩm riêng biệt có tên MySQL cho Visual Studio có sẵn bằng Trình cài đặt MySQL cho Windows (xem http://dev.mysql.com/tech-resource/articles/mysql-installer-for-windows.html ).


4
Tôi nghĩ rằng tôi đã đề cập rằng phiên bản mới nhất có sẵn ở đây (6.2.2 hiện tại): mysql.com/doads/connector/net
Brett Ryan

3
Điều này có hỗ trợ EF4 và VS2010 không? Tôi đã cài đặt trình kết nối và cố gắng thêm một kết nối mới trong VS2010 nhưng MySQL không hiển thị trong danh sách các nhà cung cấp
Abhijeet Patel

1
Tôi tò mò về MySQL, EF4 và VS2010.
Vinicius Rocha

1
Nó nên nếu bạn có kết nối mới nhất. Tôi vừa chuyển sản phẩm của mình sang .NET4 vì có hỗ trợ MySQL Entity. Các công cụ và mọi thứ đều hoạt động tốt, nhưng vấn đề lớn là sự hỗ trợ cơ bản mà nó cung cấp cho truy vấn thực tế. Có khá nhiều vấn đề với các biểu thức lamba mà bạn không gặp phải với MSSQL
David Anderson

1
Tất nhiên, có những phiên bản mới sắp ra mắt. Hiện đang hỗ trợ EF5, phiên bản 6.7.4: dev.mysql.com/doads/connector/net/#doads Ngoài ra, kể từ phiên bản này, plugin VS với máy chủ MySQL và các công cụ khác đi kèm được gói trong một gói: dev.mysql.com / tech-resource / article / tầm
Nullius

22

Tôi đã sửa lỗi mã hóa của liên kết đó - giờ đây người dùng có thể nhấp qua phải thay vì phải sao chép / dán hoặc chọn / goto
kͩeͣmͮpͥ

7
Liên kết không hoạt động
MüllerDK

2
Bạn có thể truy cập các bài viết với liên kết này: pattersonc.com/blog/2009/04
Andy White

Việc sử dụng MYSQL với EF có tốt hơn không hay vẫn còn vấn đề? Nếu máy chủ SQL thích hợp hơn thì ai cũng có thể xác định chính xác lý do tại sao máy chủ SQL thích hợp hơn chỉ vì cùng nhà cung cấp Microsoft?
dùng3508811


7

Đây không phải là về MS và những gì họ muốn. Họ đã tạo ra một hệ thống * mở cho những người khác cắm 'nhà cung cấp' - postgres và sqlite có nó - mysql chỉ là laggin ... nhưng, tin tốt cho những người quan tâm, tôi cũng đang tìm kiếm điều này và thấy rằng Trình kết nối MySql / Net 6.0 sẽ có nó ... bạn có thể kiểm tra nó ở đây:

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


1
Tôi tự hỏi "ban đầu" nghĩa là gì khi họ nói "Hỗ trợ khung thực thể ban đầu".
vintana

5

Bạn sẽ cần một nhà cung cấp bản đồ cho MySQL. Đó là một điều nữa mà Entity Framework cần để biến điều kỳ diệu thành hiện thực. Blog này nói về các nhà cung cấp bản đồ khác ngoài một nhà cung cấp mà Microsoft đang cung cấp. Tôi không tìm thấy bất kỳ đề cập nào về MySQL.


Uh, đúng vậy. Tôi đã hy vọng có một cái gì đó sẵn sàng ngay bây giờ.
vintana

2

Vintana,

Tất nhiên là có thứ gì đó sẵn sàng rồi. http://www.devart.com/products.html - mặc dù nó mang tính thương mại (bạn có bản dùng thử IIRC 30 ngày). Họ làm cho một nhà cung cấp viết sống, vì vậy tôi đoán nó nên nhanh và ổn định. Tôi biết các công ty thực sự lớn sử dụng nhà cung cấp Oracle của họ thay vì Orace và MS.


Cảm ơn bạn đã phản hồi của bạn. @Vintana, bạn có thể tìm thêm thông tin về dotConnect cho MySQL và các ưu điểm của nó tại đây devart.com/dotconnect/mysql . Để cải thiện công việc của bạn với các thực thể Khung thực thể, chúng tôi cung cấp một công cụ nâng cao để tạo mô hình trực quan - Nhà phát triển thực thể devart.com/entitydeveloper .
Devart

1

Hãy cẩn thận khi sử dụng trình kết nối .net, Trình kết nối 6.6.5 có lỗi, nó không hoạt động để chèn các giá trị tinyint làm danh tính, ví dụ:

create table person(
    Id tinyint unsigned primary key auto_increment,
    Name varchar(30)
);

nếu bạn cố gắng chèn một đối tượng như thế này:

Person p;
p = new Person();
p.Name = 'Oware'
context.Person.Add(p);
context.SaveChanges();

Bạn sẽ nhận được một ngoại lệ tham chiếu 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()

Cho đến bây giờ tôi vẫn chưa tìm được giải pháp, tôi phải thay đổi danh tính nhỏ bé của mình thành nhận dạng int không dấu, điều này đã giải quyết vấn đề nhưng đây không phải là giải pháp phù hợp.

Nếu bạn sử dụng phiên bản cũ hơn của Connector.net (tôi đã sử dụng 6.4.4), bạn sẽ không gặp phải vấn đề này.

Nếu ai đó biết về giải pháp, xin vui lòng liên hệ với tôi.

Chúc mừng!

Oware


Lỗi được ném vì p là null. Bạn phải tạo một thể hiện trống mới của đối tượng trước. Tức là người p = người mới (); không phải người p; Vì vậy:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Dave

xin lỗi tôi đã quên thêm dòng mới, ngay cả khi tôi thêm dòng mới, lỗi vẫn xuất hiện
nợ

Lỗi được sửa trong phiên bản 6.8.2. bug.mysql.com/orms.php?id=70888 Trình kết nối / Net 6.8.3 được phát hành. dev.mysql.com/doads/connector/net
Der_Meister



0

Nếu bạn quan tâm đến việc chạy Entity Framework với MySql trên mono / linux / macos, điều này có thể hữu ích https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/


Việc sử dụng MYSQL với EF có tốt hơn không hay vẫn còn vấn đề? Nếu máy chủ SQL thích hợp hơn thì ai cũng có thể xác định chính xác lý do tại sao máy chủ SQL thích hợp hơn chỉ vì cùng nhà cung cấp Microsoft?
dùng3508811

Tôi không chắc nó như thế nào ngay bây giờ, nhưng chúng tôi đã có trải nghiệm khá tồi tệ do thiếu các tính năng và nó không nhất quán tổng thể. MS MSQL chắc chắn là tốt hơn, bởi vì Microsoft đặt ngăn xếp riêng của mình lên hàng đầu.
Igor Yalovoy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.