2011-09-14 37 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