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 } 

ActiveSessionManagerSessionProvider的实现非常简单,您可以在之前的链接中找到它。

您可以按如下方式公开方法:

  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和工作单元模式