2012-06-30 74 views
2

我最近開始自學C#和Asp.net。我正在嘗試構建一個簡單的博客應用程序。我對存儲庫模式的使用感到困惑。我看過很少的教程,其實現也各不相同。存儲庫模式在asp中。 net mvc3

對於我的博客應用程序,我有兩個數據庫表格(模型) - 博客和評論。目前,我有一個IDbContext它看起來像這樣:

public interface IDBContext 
    { 
     IQueryable<Blog> FindAllBlogs(); 
     IQueryable<Blog> FindBlogsInMonth(int month); 
     Blog GetBlog(int id); 
     void Add(Blog blog); 
     void Update(Blog blog); 
     void Delete(Blog blog); 

     void Add(Comment comment); 
     //void Remove(Comment comment); 
    } 

,我有寶庫,它看起來像這樣:

public class BlogRepository : IDBContext 
    { 
     private BlogDb db = new BlogDb(); 

     public IQueryable<Blog> FindAllBlogs() 
     { 
      return db.Blogs.OrderByDescending(b => b.PublishDate); 
     } 

     public Blog GetBlog(int id) 
     { 
      return db.Blogs.Single(b => b.BlogID == id); 
     } 
... 
} 

其他實現庫模式是這樣的:

public interface IDbContext 
{ 
    IQueryable<Blog> Blogs { get; } 
    IQueryable<Comments> Comments { get; } 
    int SaveChanges(); 
    T Attach<T>(T entity) where T : class; 
    T Add<T>(T entity) where T : class; 
    T Delete<T>(T entity) where T : class; 
} 

它調用一個存儲庫,並有查詢單獨的類。

什麼是最好的方法來做到這一點?

回答

3

最簡單的方法是直接使用實體框架,尤其是實體框架4.1及更高版本中顯示的新的DbContext功能。

上下文將包含DbSet屬性 - 每個都是存儲庫模式的實現,它可以完成上面描述的所有目標。如果需要單元測試支持,則可以使用IDbSet。

我見過很多演示ASP.NET MVC存儲庫模式在線的演示,最終將自定義存儲庫包裝爲實體框架。這是浪費時間 - 它是包裝其他代碼的代碼,除了增加不必要的複雜性外,沒有任何直接的用途。

+0

感謝您的評論。你在這裏討論了哪些新功能。我會很感激,如果你能指點我可以讀懂的一些資源的方向。 – Tripping

+0

我使用微軟EF團隊的博客文章開始使用4.1版本:http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-model-amp-數據庫先walkthrough.aspx。如果您是「Code First」,「Model First」和「Database First」的新手,那麼我建議從「Model First」開始。它支持相同的EDMX文件,但修改代碼生成以使用DbContext和DbSet。 – ShadowChaser