4

Я новичок в NHibernate и я пытаюсь impelement Generic Repository Pattern и Единицы работы для использования в ASP.NET MVC 3 приложения , Я googled название и нашел новые ссылки; но все они были более сложными для понимания мной. Я использую StructureMap как мой IOC. Можете ли вы предложить мне некоторые ссылки или сообщения в блоге, пожалуйста?как реализовать общий шаблон репозитория и UOW в NHibernate 3,2

+1

ISession от NHibernate уже представляет собой единицу работы и доступ к репозиторию. –

+0

Репозиторий должен инкапсулировать уровень доступа к данным, то есть использовать его, но НЕ будет показывать Nhibernate. И правильно спроектированный репозиторий (для ваших нужд, общий репозиторий бесполезен) не должен нуждаться в единице работы либо – MikeSW

ответ

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

Thanks; Я понял. Но теперь, как я могу создать объект «ISession» посредством инъекции? 'public Repository (сеанс ISession)', но кажется, что 'ISession' может быть создан только методом OpenSession; например, как работать с этим репозиторием через StructureMap? можете больше объяснить, пожалуйста? –

+1

@ king.net Я сам использую ninject по структурной карте, однако подобные понятия применимы. Внутри ninject я бы сделал что-то вроде этого: Bind () .ToMethod (x => NHibernateHelper.OpenSession()). InRequestScope(); – Jesse

+0

Спасибо, полезный и полный ответ, принять его; привет –

1

Проверьте это решение - https://bitbucket.org/cedricy/cygnus/overview

Его простая реализация шаблона репозитория, который мы использовали в наших продуктах MVC 1, 2 и 3.

Конечно, с тех пор мы узнали, что мы действительно ценим, что наши запросы запускаются напрямую против ISession. У вас есть больше контроля над ними. Это и Ayende сказали нам не слишком.

Спасибо, Седрик!

+0

Спасибо. Ответ проголосовали. С уважением –

Смежные вопросы