NHibernate Репозиторий - PullRequest
       11

NHibernate Репозиторий

3 голосов
/ 01 июля 2011

Есть ли у кого-нибудь правильные и упрощенные записи в репозитории NHibernate? Я использовал репозитории Java, Hibernate, LCDS DataService с FlexBuilder (используя канализацию rtmp) и хочу реализовать фундаментальные принципы в C # .NET.

Я просмотрел много онлайн-документации, но ничто не отражало точное использование, как с FlexBuilder.

Если у кого-нибудь есть небольшой пример приложения, поделитесь им. Это было бы очень полезно.

С уважением Нитин

1 Ответ

17 голосов
/ 04 июля 2011

См. Эти:

Сначала создайте интерфейс IRepository:

public interface IRepository<T>
{
    int Add(T entity);
    void Delete(T entity);
    void Update(T entity);
    T GetById(int id);
    IEnumerable<T> FindAll(DetachedCriteria criteria);
    ...
    .
    .
    //
}

Затем реализуйте этот интерфейс следующим образом:

 public class Repository<T> : IRepository<T>
{
    readonly IActiveSessionManager _activeSessionManager;
    protected ISession Session
    {
        get { return _activeSessionManager.GetActiveSession(); }
    }
    public Repository(IActiveSessionManager activeSessionManager)
    {
        _activeSessionManager = activeSessionManager;
    }
    public int Add(T entity)
    {
        int newId = (int)Session.Save(entity);
        Session.Flush();
        return newId;
    }
    .
    .
    // add the remaining implementations
}

Реализация ActiveSessionManager и SessionProvider очень просты, и вы можете найти их в предыдущих ссылках.

Вы можете выставить свои методы следующим образом:

 public T FindOne(NHibernate.Criterion.DetachedCriteria criteria)
 {
     return criteria.GetExecutableCriteria(Session).UniqueResult<T>();
 }

Тогда:

public class EntityRepository : Repository<Entity>
{
    public EntityRepository(IActiveSessionManager activeSessionManger)
        : base(activeSessionManger)
    {
    }
    public Entity GetByName(string name)
    {
        var criteria = NHibernate.Criterion.DetachedCriteria.For<Entity>()
            .Add(Restrictions.Eq("name", name));
        return FindOne(criteria);
    }
    public IList<Entity> returnsomething()
    {
    }
    ....
}

Это базовая реализация для этого шаблона, но вы можете украсить его так, как вам нравится ваш дизайн.

Вы можете пойти дальше, я рекомендую, после понимания этого шаблона и реализовать его, проверив NHibernate и Единица работы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...