2011-09-14 36 views
1

我玩弄作出NHibernate的通用回购,但我不确定如何使一个方法,通过ID通用储存库。 FindByID

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>(); 
     } 
    } 
+3

不是你的Get方法吗? –

回答

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