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.
.NET 3.5 hoặc .NET 4.0? Tôi khuyên bạn nên tránh xa EF 1.0/3.5. –