通用存储库。 FindByID

时间:2011-09-14 20:40:43

标签: c# nhibernate repository repository-pattern

我正在玩一个nhibernate泛型回购,但我不确定如何制作一个方法来通过ID返回一个实体

 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 :(得分:0)

您可以在存储库界面中定义此方法:

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);
    }
}

作为旁注,从域驱动设计角度来看,通用存储库接口有时被视为bad practice