2010-05-20 27 views
8

Tôi biết điều này đã được hỏi nhiều lần và tôi đã đọc tất cả các bài viết cũng nhưng tất cả đều rất cũ. Và xem xét đã có tiến bộ trong các phiên bản và phát hành, tôi hy vọng có thể có quan điểm mới.Entity Framework so với nHibernate for Performance, Learning Curve tính năng tổng thể

Chúng tôi đang xây dựng một ứng dụng mới trên ASP.NET MVC và cần hoàn thành công cụ ORM. Chúng tôi chưa bao giờ sử dụng ORM trước đây và có khá nhiều đun sôi xuống hai - nHibernate & Entity Framework.

Tôi thực sự cần một số lời khuyên từ một người đã sử dụng cả hai công cụ này và có thể đề xuất dựa trên trải nghiệm. Có ba điểm mà tôi đang tập trung vào hoàn thiện -

  1. Performance
  2. Learning Curve
  3. Nhìn chung Capability

lời khuyên của bạn sẽ được đánh giá cao.

Trân trọng,

+2

.NET 3.5 hoặc .NET 4.0? Tôi khuyên bạn nên tránh xa EF 1.0/3.5. –

Trả lời

10

Tôi sẽ sử dụng Nhibernate. Tôi sẽ đón Sharp Architecture như một khuôn khổ tuyệt vời bao gồm NHibernate, ASP.NET MVC và một loạt các công cụ mã nguồn mở khác thành một toàn bộ mạch lạc mà sẽ cung cấp cho bạn một nền tảng kiến ​​trúc vững chắc.

Nhibernate trưởng thành hơn EF4. Nó được hỗ trợ tốt bởi cộng đồng. Miễn là bạn sẵn sàng để đôi tay của bạn bị bẩn theo thời gian, bạn sẽ thích nó. Đó là hỗ trợ cho LINQ hiện tại là một chút yếu nhưng nó nhanh chóng nhận được tốt hơn. Đường cong học tập không phải là xấu, nhưng những thứ như quản lý phiên có thể hơi khó hiểu lúc đầu. Một trong những lý do tôi thích Sharp Architecture là họ có tất cả các công cụ NHibernate bạn sẽ cần tại chỗ và rất nhiều hướng dẫn về cách sử dụng nó đúng cách trong một dự án ASP.NET MVC.

EF4 có tem MS phê duyệt. Nó là khá tốt bây giờ nhưng vẫn còn đằng sau NHibernate. Nó là một sự lựa chọn hoàn hảo và bạn sẽ tìm thấy rất nhiều tài liệu từ MS, MS hỗ trợ và cuối cùng nhiều nhà phát triển đã quen thuộc với các ins and outs. Tôi cũng nên đề cập rằng các nhân viên Sharp Architecture đang thêm hỗ trợ cho EF4 vào khuôn khổ chung của họ. Họ vẫn sẽ hỗ trợ NHibernate, nhưng bạn sẽ có thể sử dụng EF4 nếu bạn muốn.

+0

Xin chào, cảm ơn Tom vì bạn đã trả lời. Tôi rất nghiêng về phía Kiến trúc Sharp. Nhưng mối quan tâm của tôi là với một số bài viết trên internet đề cập đến vấn đề hiệu suất với nHibernate. Bây giờ tôi đã nghĩ rằng nếu bạn làm đúng, bạn có thể đạt được hiệu suất tốt hơn, nhưng sau đó một lần nữa tôi và nhóm của tôi đang đặt tay lần đầu tiên. – hadi

+1

@hadi: NHibernate không phải là vấn đề hiệu suất. Vấn đề hiệu suất là cách bạn sử dụng nó. Ví dụ, nếu bạn sử dụng tải chậm và lặp qua một tập kết quả lớn truy cập vào một số thuộc tính gây ra một I/O cơ sở dữ liệu cho mỗi lần lặp lại, hiệu năng là kém. Tôi khuyên bạn nên nhận một bản sao của Nhibernate Profiler từ http://nhprof.com/ để kiểm tra các mẫu truy cập của bạn và giữ hiệu suất tốt. –

+0

Cảm ơn bạn đời, tôi nghĩ tôi sẽ tiếp tục với nHibernate. Một lần nữa xin cảm ơn sự giúp đỡ của bạn :) – hadi

2

Tôi nghĩ phải mất nhiều thời gian hơn để học NHibernate.

EF cung cấp thiết kế đồ họa, tiếc là NHibernate không có nhà thiết kế chung. BTW nó không phải là một vấn đề. Nếu bạn thiết kế theo cách điều khiển miền (DDD), bạn sẽ thiết kế các thực thể của mình trước và bạn không quan tâm đến cấu trúc cơ sở dữ liệu (như bạn đã từng sử dụng), NHibernate sẽ xử lý điều đó cho bạn.

EF 4 tiến gần hơn tới NHibernate. Tôi sẽ không bắt đầu làm việc với EF 3.5, nó thiếu rất nhiều tính năng.

Nếu bạn nghĩ NHibernate quá phức tạp ngay từ cái nhìn đầu tiên, bạn có thể bắt đầu với các khung được xây dựng trên đầu trang của NHibernate. ActiveRecords và Sharp Architect là những ví dụ điển hình.

AFAIR EF 3.5 chỉ hỗ trợ SQL Server 2000. Nó không thể xử lý các kiểu dữ liệu mới từ SQL Server 2005. Tôi không có thông tin về EF 4 nhưng tôi cho rằng nó hỗ trợ những cải tiến này.

Nếu bạn sử dụng NHibernate trong các ứng dụng từ thực tế, bạn phải xây dựng cơ sở hạ tầng. Ví dụ. Tôi đã triển khai các mẫu Đơn vị công việc và Kho lưu trữ Đơn để có thể viết các bài kiểm tra và tạo các lớp trong ứng dụng của tôi. Bạn phải mong đợi tương tự bằng cách sử dụng EF. Việc tách và gắn các thực thể trong EF 3.5 không phải là điều dễ dàng, tôi phải viết các phương pháp mở rộng khéo léo để đánh dấu các trường bẩn và vân vân. Tôi hy vọng họ giải quyết nó trong EF 4. Không có vấn đề như vậy với NHibernate.

Bạn không phải viết truy vấn HQL trong NHibernate, bạn có thể sử dụng nhà cung cấp LINQ. Tôi nghĩ nó rất quan trọng. :)

Tất cả trong tất cả NHibernate là sản phẩm hoàn thiện với cộng đồng tốt và hỗ trợ thương mại. EF còn trẻ nhưng được hỗ trợ mạnh mẽ bởi Microsoft. Oh, và EF là một điều duy nhất của Microsoft trong khi bạn có thể chuyển giao kiến ​​thức NHibernate của bạn cho Java. Điều này tính cho bạn.

+1

NHibernate có một nhà thiết kế đồ họa. –

+0

Tôi đang làm việc với SQLite và tôi không biết về các nhà thiết kế đồ họa hỗ trợ nó. Xin vui lòng gửi một liên kết, tôi rất thích sử dụng nó. Tôi muốn tìm một nhà thiết kế có thể đảo ngược kỹ sư lược đồ cơ sở dữ liệu để ánh xạ thực thể cho hầu hết các DB được hỗ trợ (bao gồm SQLite). – artur02

2

Tôi đang cố gắng để nhìn vào điều này ... Sau khi xây dựng các ứng dụng vào cả hai, NHibernate chắc chắn là mạnh hơn, nhưng nó cũng khá vụng về nơi EF là rất sạch sẽ . Và sau khi làm việc với Rails/ActiveRecord, cả hai đều rất giàu tính năng so sánh, do đó, hoặc là chắc chắn sẽ làm việc!

Tôi nhận thấy rằng NHibernate theo dõi những gì nó vừa chạy, và nếu nó chạy một câu lệnh, nó sẽ không phát hành lại, vì vậy ứng dụng được thiết kế phù hợp sẽ chạy các câu lệnh cơ sở dữ liệu tối thiểu. Tôi biết rằng EF cũng không hẳn là chậm, nhưng tôi không chắc liệu nó có lưu trữ các câu lệnh và kết quả theo cùng một cách hay không. Đối với một ứng dụng lớn, điều này có thể tiết kiệm một số tài nguyên cơ sở dữ liệu!

Vì vậy, trong ngắn hạn, NHibernate cho chức năng và cấu hình, và EF 4.0 cho sạch sẽ và một đường cong học tập dễ dàng nhanh chóng. Ngoài ra, người ta nên mong đợi EF trong phiên bản tiếp theo hoặc hai nên có thể bắt kịp hoặc vượt qua NHibernate trong chức năng quá, do đó, nó có thể làm cho tinh thần để có một số quen thuộc với cả hai.

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