2011-09-14 14 views
1

をFindByID私は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>(); 
     } 
    } 
+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と見なされることがあります。

関連する問題