我之前在一些项目中使用过EntityFramework,但现在我想尝试(或切换到)NHibernate!
但是我有一些麻烦要弄清楚如何使用存储库模式实现UnitOfWork。
使用Entity Framework我做了类似的事情:
public class MyDbContext : DbContext, IMyDbContext
{
IDbSet<MyEntity> MyEntities { get; set; }
....
}
public class MyRepository : IMyRepository
{
private readonly IMyDbContext _myDbContext;
public MyRepository(IMyDbContext myDbContext)
{
_myDbContext = myDbContext;
}
//CRUD-Stuff....
public void SaveChanges()
{
_myDbContext.SaveChanges();
}
}
与NHibernate相同的最佳做法是什么?
答案 0 :(得分:3)
为什么要实施另一个UnitOfWork。 ISession 已经是一个UOW实现。走这条路只意味着
GetLatePayingCustomersAndTheirOrders()
属于OrdersRepository还是CustomerRepository?只需获取会话并定义2个批处理查询或一个已加入查询答案 1 :(得分:2)
ISession类似于EF DbContext,并将其注入存储库构造函数是一个非常好的主意。两个框架之间最大的区别是持久性模型,NHibernate对象是瞬态的,持久的或与ISession分离的。使用ISession的Save方法使瞬态对象持久化;持久(即跟踪)对象在刷新会话或提交事务时会自动保存其更改。
我建议您阅读并重新阅读chapter 9 of the documentation以了解核心概念。