2009-09-24 23 views
12

(Đây phải là một câu hỏi thường gặp, vì vậy tôi hy vọng nó sẽ được đóng lại như trùng lặp, tuy nhiên tôi không thể tìm thấy một câu hỏi mà chứa một tốt tổng quan của vấn đề vv .)thế nào để chọn một đối tượng bản đồ quan hệ cho .net

một ai đó nên xem xét gì khi chọn một ORM cho một .net hệ thống?

Làm thế nào là trên quyết bởi ORM đang được áp dụng phổ biến cho các hệ thống .net.

(Witch stack overflow câu hỏi tôi nên liên kết đến trong một câu trả lời khi tôi nói “xem xét sử dụng một ORM” cho một câu hỏi .net)

Liệu về một điều ước để cung cấp một câu trả lời mới và nhận được tiền thưởng?

+0

http://c2.com/cgi/wiki?ObjectRelationalToolComparisonDotNet – eschneider

Trả lời

9

Đây là câu hỏi/câu trả lời chính tôi đã chỉ mọi người liên quan đến việc chọn a.NET ORM:

NHibernate, Entity Framework, active records or linq2sql

tôi đặt một bó của "sao chép" câu hỏi gõ vào câu trả lời của tôi cho người khác. Vì vậy, có rất nhiều đọc bạn có thể làm từ một loạt các quan điểm khác nhau.

Tôi cũng sẽ cố gắng trả lời những câu hỏi cụ thể của bạn:

một ai đó nên xem xét gì khi lựa chọn một ORM cho một hệ thống .net?

  • Bạn muốn chắc chắn nó hoạt động với cơ sở dữ liệu của bạn. Nếu thiết kế cơ sở dữ liệu bạn là nhà nước của nghệ thuật 15 năm trước, nhiều nhỏ hơn và/hoặc chưa trưởng thành ORMs sẽ không làm việc với thiếu lại phím, mối quan hệ kỳ lạ, vv

  • Bạn muốn đảm bảo nó hoạt động với nhà cung cấp cơ sở dữ liệu của bạn. Hỗ trợ SQL Server luôn có sẵn , nhưng các cơ sở dữ liệu khác có thể hoặc có thể không được hỗ trợ bởi nhiều ORM khác nhau (MYSQL có vẻ là cơ sở dữ liệu thường được hỗ trợ nhiều nhất) .

  • Nếu bạn muốn tạo cơ sở dữ liệu dựa trên lớp .NET của mình, bạn cần để đảm bảo ORM của bạn hỗ trợ.

  • Nếu bạn muốn thực hiện, tôi đoán bạn tránh xa cái xấu thực hiện người, nhưng những người sẽ không bao giờ làm cho một top 5 danh sách, do đó, miễn là bạn đi với một ORM rằng có một số chính đường phố cred, bạn có lẽ là phạt tiền ở đây.

  • Bạn cần phải chắc chắn rằng nó có nhiều tính năng bạn cần hỗ trợ: http://ayende.com/Blog/archive/2006/05/12/25ReasonsNotToWriteYourOwnObjectRelationalMapper.aspx

  • Xem xét nhà cung cấp lock-in và làm thế nào dễ dàng bạn có thể hoặc không thể thoát nó (đối với cả các nhà cung cấp cơ sở dữ liệu và nhà cung cấp ORM).

  • Cân nhắc số tiền bạn muốn chi tiêu.

  • Hãy xem xét những gì bạn muốn cho mã thế hệ.

  • Hãy xem xét những gì bạn muốn cho thử nghiệm đơn vị hỗ trợ.

  • Hãy xem xét thời gian bạn muốn dành cho việc nghiên cứu các tùy chọn khác nhau.

  • Cân nhắc cộng đồng tồn tại xung quanh ORM.

Có nhiều điều cần lưu ý. Tôi chắc rằng tôi có thể nghĩ nhiều hơn.Cuối cùng, rất nhiều nó là tình huống và bạn cần phải đưa ra quyết định của riêng bạn những gì là tốt nhất cho bạn và dự án của bạn.

Địa chỉ trên được giải quyết bằng ORM được sử dụng phổ biến cho .net hệ thống.

NET ORM duy nhất mà tôi biết rằng đáp ứng khá nhiều tất cả nhu cầu một dự án .NET có thể có (trừ các nhà cung cấp cơ sở dữ liệu tối nghĩa hơn) là NHibernate. Nó đã được thử nghiệm với rất nhiều cơ sở dữ liệu "di sản" trong rất nhiều kịch bản khác nhau.

+1

+1 cho NHibernate –

0

Tôi không phải là nhà phát triển .net, nhưng bạn nên kiểm tra nHibernate. Đây là phiên bản .net của ORM hiện đại cho Java. Tôi chắc chắn nó là một giải pháp tuyệt vời cho .net quá, như ist làm cho các đối tượng ánh xạ khá dễ dàng, nhưng vẫn đủ mạnh để ánh xạ các đối tượng tới gần như bất kỳ loại lược đồ sql nào.

2

ORM Battle
Toàn bộ trang web dành riêng cho việc phân tích và so sánh các sản phẩm .NET ORM khác nhau (Object Relational Mapping)! Tuy nhiên, hãy nhớ rằng ngay cả trang web ORMBattle chỉ so sánh khoảng 7 hoặc 8 ORM (mặc dù các trang web đó so sánh, nhưng dường như nó khá là triệt để nhưng hãy xem tuyên bố từ chối bên dưới).

Theo số SharpToolBox website, có khoảng 40 ORM khả dụng! Danh sách các sản phẩm ORM và mô tả của chúng trên trang web SharpToolBox sẽ mang lại cho bạn một khởi đầu tốt. Xem tại đây: SharpToolBox Search Results for Object-Relational Mapping

Xem xét khá nhiều nhà phát triển và nhu cầu truy cập dữ liệu của mỗi ứng dụng có thể khác nhau, việc so sánh hoàn toàn giữa tất cả chúng sẽ khó khăn. Đây có lẽ là lý do mà hơn 40 sản phẩm ORM khác nhau tồn tại vì không có "một kích thước phù hợp với tất cả" trong thế giới ORM. Ngoài ra, xin lưu ý rằng bất kỳ sự so sánh nào giữa các sản phẩm ORM cũng có thể là "thiếu sót" vì bạn không thể luôn chắc chắn rằng chức năng khác nhau của các sản phẩm ORM khác nhau được thiết kế cho cùng một mục đích chính xác. Nhận xét của AJ về câu trả lời này liên kết đến một số blog post bởi Ayende Rahien, người mô tả chính xác hiện tượng này khi ORMBattle so sánh NHibernate với các ORM khác.

Tôi nghĩ cách tiếp cận tốt nhất là xem xét điểm chuẩn và đọc mô tả của từng ORM, nhưng không hiểu những điều đó theo nghĩa đen, mà là diễn giải những con số đó dựa trên những gì ứng dụng của bạn nên làm. Ví dụ: nếu ứng dụng của bạn chủ yếu đọc và ghi từng bản ghi cơ sở dữ liệu, bạn có thể sử dụng một sản phẩm ORM hoàn toàn khác với một ứng dụng cần xử lý các bản ghi cơ sở dữ liệu theo lô.

+1

Tính hữu ích của phân tích được thực hiện bởi Trận ORM bị tranh cãi cao ... đọc tốt: http://ayende.com/Blog/archive/2009/ 08/15/điểm chuẩn-là-useless-yes-again.aspx –

+0

@AJ - Bài viết thú vị. Tôi đồng ý rằng điểm chuẩn (của bất cứ điều gì) có thể gây hiểu nhầm. Đây là lý do tại sao mỗi người tìm kiếm một công cụ ORM nên làm nghiên cứu riêng của họ do tất cả mọi người (và nhu cầu của họ) là khác nhau. Điểm chuẩn thường có thể giống như số liệu thống kê và chúng tôi biết chúng hữu ích như thế nào! ;) (http://www.quotegarden.com/statistics.html) – CraigTP

+0

Đó là lý do tại sao có phần FAQ lớn :) Xem http://ormbattle.net/index.php/faqs.html –

0

Chọn giữa NHibernate hoặc Entity Framework. NHibernate là mở rộng hơn và thường có nhiều tính năng phong phú hơn. Entity Framework hoạt động tốt hơn và dễ sử dụng với bộ tính năng phong phú.

Cả hai khung công tác đều tuyệt vời, Khuôn khổ thực thể có một lợi thế lớn so với NHibernate: dễ dàng hơn để làm việc, giai đoạn khởi động có thể khá khó khăn. EF làm điều này tốt hơn nhiều. Tuy nhiên, ở một số khu vực NHibernate là cấp trên, ví dụ: khi nói đến việc mở rộng khung công tác NHibernate cung cấp thêm các tùy chọn

Cuối cùng, nhận cuộc gọi của bạn. Một trong hai người sẽ không bao giờ làm bạn thất vọng.

Các vấn đề liên quan