Универсальный репозиторий. FindByID - PullRequest
1 голос
/ 15 сентября 2011

Я занимаюсь созданием универсального репо nhibernate, но я не уверен, как создать метод для возврата сущности обратно с идентификатором

 public class NhibernateRepo : INhibernateRepo
    {
        private readonly ISession session;

        public NhibernateRepo(ISession session)
        {
            this.session = session;
        }

        public void Create<T>(T entity)
        {
            session.Save(entity);
        }

        public void CreateOrUpdate<T>(T entity)
        {
            session.SaveOrUpdate(entity);
        }

        public void Delete<T>(T entity)
        {
            session.Delete(entity);
        }

        public void Update<T>(T entity)
        {
            session.Update(entity);
        }

        public T Get<T>(object id)
        {
            return session.Get<T>(id);
        }

        public T Load<T>(object id)
        {
            return session.Load<T>(id);
        }

        public void ReadOnly(object entity, bool readOnly = true)
        {
            session.SetReadOnly(entity, readOnly);
        }

        public void Evict(object entity)
        {
            session.Evict(entity);
        }

        public object Merge(object entity)
        {
            return session.Merge(entity);
        }

        public IEnumerable<T> FindAll<T>()
        {
            return session.Query<T>();
        }
    }

1 Ответ

0 голосов
/ 15 сентября 2011

Вы можете определить этот метод в интерфейсе репозитория:

interface IRepository<TEntity, TId> where TEntity : class {

    TEntity FindById(TId id); 
    ...
}

И следующее в реализации репозитория:

class Repository<TEntity, TId> : IRepository<TEntity, TId> where TEntity : class{
    public TEntity FindById(TId id) {
        return _session.Get<TEntity>(id);
    }
}

В качестве примечания, общий репозиторий интерфейс иногда считается плохой практикой с точки зрения доменного дизайна.

...