NHibernate和自我跟踪实体

时间:2011-01-03 21:22:19

标签: nhibernate

为什么NHibernate不支持自我跟踪实体有任何架构或哲学原因吗?基于会话的更改跟踪很好,但在某些极少数情况下无法使用(例如,会话中有大量实体,但每个事务只修改了一个实体)。

你有什么看法?感谢。

3 个答案:

答案 0 :(得分:1)

您还可以查看FindDirty的{​​{1}}方法。在这里,您可以注入自己的脏跟踪机制,而不会影响业务逻辑,也不会放弃任何其他NH功能。

答案 1 :(得分:0)

我真的不知道“自我跟踪实体”是什么意思,我想它来自实体框架? IStatelessSession不会缓存实体。会话不是构建为在缓存中有很多实体,而是仅包含要在屏幕上显示给用户的实体。如果您需要批处理或长时间运行的事务,其他工具将比NHiberante更好地完成工作。我想它不是由NHiberante构建的,原因如下:

  • 人们已经使用过其他工具。
  • 现有代码不多,并且没有太多现有功能可以构建它。
  • 现有功能需要突破或必须牺牲。
  • 有人必须写代码......

答案 2 :(得分:0)

NHibernate和Entity-Framework之间存在着重要的区别。 EF的方法 ObjectContext.SaveChanges(..)仅保存对实体所做的更改,因为它已成为对象上下文的一部分。 例如:

MyEntity e = new MyEntity();
e.Key = blabla;
e.Id = 3242342;
e.Name = "Hugo";
using(MyObjectContext ct = new MyObjectcontext())
{
    ct.MyEntity.Attach(e);
    ct.SaveChanges();
}

这根本不会改变数据库,因为当实体成为上下文的一部分时,不会对实体进行任何更改。在NHibernate中,值Hugo将被保存到数据库中。 Nhibernate中不需要自我跟踪实体。