2011-09-14 10 views
1

내가 NHibernate에 일반적인 REPO을 함께 주위를 연주하고 있지만 당신은 저장소 인터페이스에서이 방법을 정의 할 수있는 방법은 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); 
    } 
} 

일반 저장소 얼굴은 때때로 Domain Driven Design 관점에서 bad practice으로 간주됩니다.

관련 문제