I (cao) đồng ý với marvelTracker (và Ayende của) những suy nghĩ.
Dưới đây là một số thông tin mặc dù:
Chiến lược chính
Có một chi phí nổi tiếng khi sử dụng GUIDs như Primary Keys.Nó được mô tả bởi Jimmy Nilsson và nó đã được công bố công khai tại http://www.informit.com/articles/article.aspx?p=25862. NHibernate hỗ trợ chiến lược khóa chính GUIDCOMB. Tuy nhiên, để đạt được điều đó trong EntityFramework thì hơi phức tạp và yêu cầu các bước bổ sung.
Enums
EntityFramework không hỗ trợ enums natively. Cho đến CTP tháng sáu thêm hỗ trợ cho Enums http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx cách duy nhất để lập bản đồ enumerations đã sử dụng cách giải quyết Hãy nhìn vào: How to work with Enums in Entity Framework?
Queries:
NHibernate cung cấp nhiều cách để truy vấn dữ liệu:
- LINQ (sử dụng nhà cung cấp dịch vụ tái cấp phép của chuyển động lại, https://www.re-motion.org/web/)
- Truy vấn được đặt tên được đóng gói trong đối tượng truy vấn
- ICriteria/QueryOver đối với các truy vấn không biết trước các tiêu chí
- Sử dụng QueryOver projections and aggregates (Trong trường hợp, chúng tôi chỉ cần các thuộc tính cụ thể của một thực thể. Trong các trường hợp khác, chúng tôi có thể cần kết quả của hàm tổng hợp, chẳng hạn như số trung bình hoặc số):
- PagedQueries: Để tránh áp đảo người dùng và tăng khả năng phản hồi của ứng dụng, tập hợp kết quả lớn thường được chia thành các trang nhỏ hơn các kết quả.
- MultiQueries kết hợp một số truy vấn ICriteria và QueryOver vào một vòng tròn cơ sở dữ liệu đơn lẻ
- Truy vấn tách biệt là đối tượng truy vấn trong các phần của ứng dụng mà không truy cập vào phiên NHibernate. Các đối tượng này sau đó được thực hiện ở nơi khác với một phiên. Điều này là tốt bởi vì chúng ta có thể tránh các kho lưu trữ phức tạp với nhiều phương thức.
ISession của QueryOver:
// Query that depends on a session:
premises = session.QueryOver<Premise>().List();
tách rời QueryOver:
// Full reusable query!
var query = QueryOver.Of<Premise>();
// Then later, in some other part of ther application:
premises = query.GetExecutableQueryOver(session).List(); // Could pass IStateleSession too.
nguồn mở
NHibernate có rất nhiều các dự án đóng góp sẵn tại http://sourceforge.net/projects/nhcontrib/
Dự án này cung cấp một số phần mở rộng rất hữu ích để NHibernate (trong số khác):
- Providers Cache (cho bộ nhớ cache 2 cấp)
- Dependency Injection cho các tổ chức không có constructor mặc định
- Full-Text Tìm kiếm (tích hợp Lucene.NET)
- Hỗ trợ không gian (tích hợp NetTopologySuite)
Hỗ trợ
EntityFramework đi kèm với sự hỗ trợ của Microsoft. NHibernate có một cộng đồng tích cực:
Ngoài ra, có một cái nhìn tại địa chỉ: http://www.infoq.com/news/2010/01/Comparing-NHibernate-EF-4
Nguồn
2011-08-06 00:16:37