2009-09-04 30 views
49

Nhóm của tôi đang bắt đầu một dự án mới trong ASP.NET MVC, và chúng tôi đang tự hỏi công nghệ nào sử dụng để truy cập dữ liệu. Làm thế nào để bạn quyết định cái nào là tốt nhất? Trong đó có hiệu suất tốt nhất? Cái nào dễ sử dụng và bảo trì hơn?NHibernate, Entity Framework, các bản ghi hoạt động hoặc linq2sql

+2

Bản ghi hoạt động có nhiều mẫu thiết kế hơn công nghệ [http://en.wikipedia.org/wiki/Active_record_pattern] trừ khi bạn đề cập đến nội dung cụ thể như Castle ActiveRecord [http://www.castleproject.org/ activerecord/index.html]? –

+0

đã nhận được, ya, tôi có nghĩa là hồ sơ hoạt động âm thanh dưới mức – Omu

+0

Đối với F #, SQLProvider: https://github.com/fsprojects/SQLProvider –

Trả lời

68

Nếu .NET 4.0, hãy 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 cho các công ty muốn có những gì Microsoft cung cấp. Cả hai đều là các lựa chọn hợp lệ và chưa có ai công bố một đòn đáng kể khách quan bằng cách so sánh thổi. Đây là một trong những so sánh không khách quan hơn:

http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

Nếu NET 3.5 hoặc sớm hơn, chọn NHibernate.

Choosing Database and ORM for a .NET project

Which ORM tool should I use for .Net development

Easiest to learn and use .NET ORM framework?

Some suggestions on which .NET ORM to look at learning

Best ORM Tool

https://stackoverflow.com/questions/380620/what-object-mapper-solution-would-you-recommend-for-net

https://stackoverflow.com/questions/249550/what-orm-frameworks-for-net-do-you-like-best

Best free ORM tools to use with .NET 2.0/3.5

https://stackoverflow.com/questions/132676/which-orm-for-net-would-you-recommend

Sau 4 tháng 9 năm 2009:

OR Mapping tool

O/RM Choice (not reliant on linq)

https://stackoverflow.com/questions/1469761/nhibernate-vs-entity-framework-vs-something-better

How to choose an object relational mapping for .net

Điều đó nói rằng, mọi thứ thay đổi. Bây giờ NHibernate hỗ trợ LINQ, tôi nghĩ NHibernate là sự lựa chọn rõ ràng trong phần lớn các tình huống. Đối với một dài hơn và khá lên đến phân tích ngày, cảm thấy tự do để đọc:

.NET and ORM - Decisions, decisions

+1

Câu hỏi này đã thu được một số câu trả lời trung bình ở trên, mặc dù đó là một câu hỏi: http://stackoverflow.com/questions/5101974/comparison-entity -framework –

+1

Cá nhân, tôi yêu cả hai khung công tác, nhưng Entity Framework có một lợi thế lớn so với NHibernate: nó dễ dàng hơn để làm việc. Đặc biệt đối với những người mới đến NHibernate, 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 nhiều tùy chọn hơn. –

+0

Hãy xem TinyDA https://github.com/kumait/TinyDA – Kumait

6

Sở thích của tôi là LLBLGenPro - một ORM thực sự tuyệt vời hoạt động như bạn mong đợi. Nó không dựa trên cấu hình như khung thực thể hoặc nhibernate, nó tạo ra DAL của bạn dựa trên db của bạn (với nhiều sự linh hoạt thông qua các công cụ của họ).

http://www.llblgen.com/defaultgeneric.aspx

2

LINQ2SQL là probobly dễ sử dụng nhất. Entity Framework cung cấp khả năng mở rộng tuyệt vời và bản phát hành trong tương lai sẽ có rất nhiều cải tiến.

Một quy tắc quan trọng về hiệu suất: viết mã dễ bảo trì, đọc và phân phối; nếu nó chậm - tối ưu hóa!

Tôi nghĩ rằng sự khác biệt về hiệu suất giữa các ORM ngày nay là đáng chú ý, vì vậy bạn nên chọn một cảm giác thoải mái và hiệu quả nhất để làm việc.

+0

Nah;) https://github.com/FransBouma/LinqToSQL2 –

2

Khung thực thể có ánh xạ tốt hơn các mối quan hệ hơn linq2sql (ví dụ: nó có nhiều mối quan hệ).

Tôi chưa sử dụng hai cái còn lại, nhưng tôi đã sử dụng Hibernate trong Java và nó khá dễ sử dụng.

+0

Có thể sử dụng PLINQO nếu bạn muốn hỗ trợ mối quan hệ nhiều-nhiều và sử dụng LINQ-2-SQL. http://www.codesmithtools.com/product/frameworks –

1

Điều này blog post so sánh các công nghệ dữ liệu khác nhau cho .NET ở các khía cạnh khác nhau (hiệu suất, khả năng bảo trì, khả năng kiểm tra, v.v.). Có thể có một số trợ giúp cho quá trình ra quyết định của bạn.

+0

Michael, SUbSonic không hoàn toàn phù hợp. Tôi thực sự không hiểu tại sao mọi người lại thử. Chỉ cần lắp ráp 300 Kb của nó, ví dụ:4 Mb @ OpenAccess - nó phải rõ ràng nó chỉ là một món đồ chơi nhỏ. Và quên LINQ ở đó - tôi đặt cược hỗ trợ LINQ của nó sẽ không bao giờ được so sánh với những người khác. –

+0

Xin lỗi, "SubSonic" và "Just its" => "So sánh";) –

0

Tôi phải đối mặt với tình huống khó xử tương tự. LINQ2SQL sẽ cung cấp cho bạn sự linh hoạt hơn và kiểm soát ngay lập tức quyền truy cập dữ liệu, tuy nhiên Khuôn khổ thực thể là giải pháp "doanh nghiệp". Tôi hiện đang cố gắng này - SubSonic và trông rất hứa hẹn.

0

Để so sánh ORMs - hãy nhìn vào http://ormbattle.net/

+6

Trang web đó đã có danh tiếng rất xấu. :( –

+1

Đồng ý, bạn phải xem công ty ORM nào hỗ trợ trang web này! – Codezy

+0

Các bạn, hãy truy cập vào FAQ và Blog @ ORMBattle, họ giải thích rất nhiều: Michael, trang này có danh tiếng xấu _for you_ - Tôi nghi ngờ vì SubSonic bạn quảng cáo –

1

tôi lựa chọn là Devart LinqConnect (http: // www. devart.com/linqconnect/). Sản phẩm này dễ sử dụng như LINQ to SQL (và thậm chí tương thích với nó) và đồng thời cung cấp các tính năng ORM nâng cao như Entity Framework. Tôi thích Visual thiết kế của họ và các tính năng ORM của họ:

  • loại Complex
  • Lazy Loading
  • PLINQ
0

Tôi đã sử dụng Entity Framework (Mã đầu tiên) và nHibernate một thời gian rồi và tôi thích nHibernate, đặc biệt thông thạo. Dường như để cho tôi linh hoạt hơn nhiều trong cách tôi ánh xạ các đối tượng của mình tới cơ sở dữ liệu. Ngoài ra, nó cho phép kiểm soát nhiều hơn đối với các hành động tải xuống và xếp tầng trên các đối tượng.

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