4

我是新來NHibernate,我努力工作教學貫徹的通用Repository模式單位使用在ASP.NET MVC 3應用。我搜索了標題並發現了新的鏈接;但所有這些對我來說都是比較複雜的。我使用StructureMap作爲我的IOC。你能給我建議一些鏈接或博客嗎?如何實現通用倉庫模式和UOW NHibernate的3.2

+1

NHibernate的ISession已經代表了一個工作單元和對存儲庫的訪問。 – 2012-03-04 16:59:11

+0

存儲庫應該封裝數據訪問層,即它將使用但不會公開Nhibernate。和一個適當的設計的存儲庫(爲您的需要,一個通用的存儲庫是無用的)不應該需要工作單位 – MikeSW 2012-03-04 19:09:21

回答

5

這裏有幾個項目的讀通:

實現我在最近的項目都使用看起來像:

public interface IRepository<T> 
{ 
    IEnumerable<T> GetAll(); 
    T GetByID(int id); 
    T GetByID(Guid key); 
    void Save(T entity); 
    void Delete(T entity); 
} 

public class Repository<T> : IRepository<T> 
{ 
    protected readonly ISession Session; 

    public Repository(ISession session) 
    { 
     Session = session; 
    } 

    public IEnumerable<T> GetAll() 
    { 
     return Session.Query<T>(); 
    } 

    public T GetByID(int id) 
    { 
     return Session.Get<T>(id); 
    } 

    public T GetByID(Guid key) 
    { 
     return Session.Get<T>(key); 
    } 

    public void Save(T entity) 
    { 
     Session.Save(entity); 
     Session.Flush(); 
    } 

    public void Delete(T entity) 
    { 
     Session.Delete(entity); 
     Session.Flush(); 
    } 
} 
+0

謝謝;我知道了。但是現在,我怎樣才能通過注入創建一個'ISession'對象? '公共庫(ISession會話)',但似乎'ISession'只能通過'OpenSession'方法創建;例如,如何通過StructureMap使用這個存儲庫?能多解釋一下嗎? – 2012-03-04 19:15:06

+1

@ king.net我自己在結構圖上使用ninject,但是類似的概念也適用。在ninject中,我會做這樣的事情:綁定().ToMethod(x => NHibernateHelper.OpenSession())。InRequestScope(); – Jesse 2012-03-04 19:27:06

+0

感謝幫助完整的答案,接受它;問候 – 2012-03-05 03:29:49

1

查看此解決方案 - https://bitbucket.org/cedricy/cygnus/overview

它是我們在生產MVC 1,2和3應用程序中使用的存儲庫模式的簡單實現。

當然,我們從那以後就知道我們非常感謝讓我們的查詢直接運行在ISession上。你有更多的控制他們的方式。那和Ayende告訴我們不要。

謝謝塞德里克!

+0

謝謝。答案投了。問候 – 2012-03-05 18:57:27