编程语言
首页 > 编程语言> > c# – NHibernate Repository

c# – NHibernate Repository

作者:互联网

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

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

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

问候
尼廷

解决方法:

看到这些:

> Data Access With NHibernate
> Repository Pattern in NHibernate

首先创建一个接口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 and the Unit of Work Pattern

标签:c,net,nhibernate,repository-pattern
来源: https://codeday.me/bug/20190713/1444770.html