NHibernate存储库

ni3*_*i3a 3 .net c# nhibernate repository-pattern

有没有人对NHibernate Repository有适当和简化的写作?我在FlexBuilder中使用了Java,Hibernate,LCDS DataService存储库(使用rtmp通道),并希望用C#.NET实现精确的基础.

我已经浏览了大量的在线文档,但没有任何反映出与FlexBuilder一样的确切用法.

如果有人有一个小的示例应用程序然后分享.这会很有帮助.

关于尼廷

Mah*_*mal 17

看到这些:

首先创建一个界面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);
    ...
    .
    .
    //
}
Run Code Online (Sandbox Code Playgroud)

然后按如下方式实现此接口:

 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
}
Run Code Online (Sandbox Code Playgroud)

执行ActiveSessionManagerSessionProvider非常简单,你可以在以前的链接中找到它.

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

 public T FindOne(NHibernate.Criterion.DetachedCriteria criteria)
 {
     return criteria.GetExecutableCriteria(Session).UniqueResult<T>();
 }
Run Code Online (Sandbox Code Playgroud)

然后:

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()
    {
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

这是此模式的基本实现,但您可以根据设计驱动它来装饰它.

我建议,在了解了这些模式并实现它之后,您可以更进一步,查看NHibernate和工作单元模式