Generic Repository. FindByID

本文关键字:FindByID Repository Generic | 更新日期: 2023-09-27 18:08:31

我正在玩一个非hibernate的通用repo,但我不确定如何使一个方法返回一个实体返回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>();
        }
    }

Generic Repository. FindByID

您可以在存储库接口中定义此方法:

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

作为旁注,从领域驱动设计的角度来看,通用存储库接口有时被认为是一个不好的实践。