2010-08-01 24 views
5

Tôi đã sử dụng NHibernate với giao diện kho lưu trữ.Mẫu lưu trữ với Khung thực thể 4

Cách thích hợp để sử dụng mẫu này với EF là gì?
Làm cách nào để triển khai giao diện kho lưu trữ này, cho một RepositoryBase<T>?

public interface IRepository<T> 
{ 
    T GetById(object id); 
    void Save(T entity); 
    T[] GetAll(); 
    void Delete(T entity); 
} 

Trả lời

0

Có một số phương pháp (hầu hết trong số chúng tương đối giống nhau và chỉ hơi khác nhau), vì vậy tôi khuyên bạn nên thực hiện một số nghiên cứu và chọn một nghiên cứu phù hợp nhất với bạn.

Với EF 4, bạn có thể triển khai kho lưu trữ chung bằng cách sử dụng ObjectSet<T>. Hãy xem xét một vài điều mà có thể giúp:

http://devtalk.dk/2009/06/09/Entity+Framework+40+Beta+1+POCO+ObjectSet+Repository+And+UnitOfWork.aspx

http://www.forkcan.com/viewcode/166/Generic-Entity-Framework-40-Base-Repository

0

Bạn về cơ bản đã Repositories bạn nói yo bối cảnh đối tượng của bạn. Chỉ thay đổi tôi sẽ làm sẽ có GetAll em đáp lại một cái gì đó thay vì IEnumerable như:

public class SomeObjectRepo : IRepository<SomeObject> 
{ 
    SomeContext GetById(object id) 
    { 
     using(var context = new MyContext()) 
     { 
      return context.SomeObjects.First(x=>x.id.Equals(id)); 
     } 
    } 

etc... 
} 
2

Vì lý do nào đó, tất cả các ví dụ được đưa ra trưng bày các bộ sưu tập như IQueryable hoặc IEnumerable. EF4 có một giao diện cho mục đích này - IObjectSet (hoặc IDbSet nếu bạn đang sử dụng CTP mới nhất).

Julie Lerman có một bài rất lớn về việc này, kể cả tạo MockSet mà thực hiện IObjectSet, vì vậy bạn có thể làm một số kiểm tra đơn vị bị ngắt kết nối

http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-6-mocks-amp-unit-tests/

+0

Dường như IObjectSet là EF cụ thể và do đó tôi không thích trong mẫu kho lưu trữ. Điểm là bạn không muốn sự phụ thuộc của bạn có sự phụ thuộc vào EF – Gluip

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