См. Эти:
Сначала создайте интерфейс IRepository
:
public interface IRepository<T>
{
int Add(T entity);
void Delete(T entity);
void Update(T entity);
T GetById(int id);
IEnumerable<T> FindAll(DetachedCriteria criteria);
...
.
.
//
}
Затем реализуйте этот интерфейс следующим образом:
public class Repository<T> : IRepository<T>
{
readonly IActiveSessionManager _activeSessionManager;
protected ISession Session
{
get { return _activeSessionManager.GetActiveSession(); }
}
public Repository(IActiveSessionManager activeSessionManager)
{
_activeSessionManager = activeSessionManager;
}
public int Add(T entity)
{
int newId = (int)Session.Save(entity);
Session.Flush();
return newId;
}
.
.
// add the remaining implementations
}
Реализация ActiveSessionManager
и SessionProvider
очень просты, и вы можете найти их в предыдущих ссылках.
Вы можете выставить свои методы следующим образом:
public T FindOne(NHibernate.Criterion.DetachedCriteria criteria)
{
return criteria.GetExecutableCriteria(Session).UniqueResult<T>();
}
Тогда:
public class EntityRepository : Repository<Entity>
{
public EntityRepository(IActiveSessionManager activeSessionManger)
: base(activeSessionManger)
{
}
public Entity GetByName(string name)
{
var criteria = NHibernate.Criterion.DetachedCriteria.For<Entity>()
.Add(Restrictions.Eq("name", name));
return FindOne(criteria);
}
public IList<Entity> returnsomething()
{
}
....
}
Это базовая реализация для этого шаблона, но вы можете украсить его так, как вам нравится ваш дизайн.
Вы можете пойти дальше, я рекомендую, после понимания этого шаблона и реализовать его, проверив NHibernate и Единица работы