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