我们希望将NHibernate用于我们的持久性服务 几个问题:
如果我们使用nhibernate加载POCO,将其移动到另一层,在那里更新(向bag添加项目或更改一些属性)然后将其返回到持久层并保存,NHibernate如何知道如何更新更改? (或许类似于选择并将更新的项目与之前的项目进行比较?)
我们可以要求NHibernate只更新特定的项目吗? (如果我们使用某些更改跟踪器知道更改)
您是否知道POCO更改跟踪器的某些库或模式?
谢谢!
答案 0 :(得分:1)
断开实体更改的有趣方法:http://ayende.com/blog/2275/disconnected-mode-change-tracking
用于分离的实体
// for single objects:
// does load the object with the same Id from db and does copy all values over and returns the tracked entity
var trackedentity = session.Merge(obj);
使用INPC进行更改跟踪:http://fabiomaulo.blogspot.com/2010/10/turbo-nhibernate-with-domain-invaders.html。我不知道准备使用库进行更改跟踪
第二个是迄今为止最容易但有一些限制
答案 1 :(得分:0)
在Web服务应用程序中,我通常不会将域实体暴露给服务客户端,所有实体都映射到DTO类。通过从数据库中检索域实体,从调用参数更新其属性并将其保存在一个事务中来完成更新。为避免编写大量手动属性分配,您可以使用AutoMapper之类的东西从DTO更新域实体。
对于应用程序内的服务层也可以这样做。