NHibernate存储库
有没有人在NHibernate Repository上有适当和简化的写作? 我在FlexBuilder中使用了Java,Hibernate,LCDS DataService存储库(使用rtmp通道),并希望用C#.NET实现精确的基础。
我已经浏览了大量的在线文档,但没有任何反映出与FlexBuilder一样的确切用法。
如果有人有一个小的示例应用程序然后分享。 这会很有帮助。
关于尼廷
看到这些:
-
使用NHibernate进行数据访问
-
NHibernate中的存储库模式
首先创建一个接口IRepository
:
public interface IRepository { int Add(T entity); void Delete(T entity); void Update(T entity); T GetById(int id); IEnumerable FindAll(DetachedCriteria criteria); ... . . // }
然后按如下方式实现此接口:
public class Repository : IRepository { 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(); }
然后:
public class EntityRepository : Repository { public EntityRepository(IActiveSessionManager activeSessionManger) : base(activeSessionManger) { } public Entity GetByName(string name) { var criteria = NHibernate.Criterion.DetachedCriteria.For () .Add(Restrictions.Eq("name", name)); return FindOne(criteria); } public IList returnsomething() { } .... }
这是此模式的基本实现,但您可以根据设计驱动它来装饰它。
我建议,在了解了这些模式并实现它之后,您可以进一步查看NHibernate和工作单元模式