NHibernate和Rhino存储库的奇怪保存行为
我和NHibernate有一些奇怪的行为。我正在从存储库中检索学习者列表,并根据需要进行更新,奇怪的是,当我保存第一个列表时,对所有学习者所做的更改都会提交到数据库中NHibernate和Rhino存储库的奇怪保存行为,nhibernate,rhino,unit-of-work,Nhibernate,Rhino,Unit Of Work,我和NHibernate有一些奇怪的行为。我正在从存储库中检索学习者列表,并根据需要进行更新,奇怪的是,当我保存第一个列表时,对所有学习者所做的更改都会提交到数据库中 [Transaction] public void UpdateLearner(Learner learner) { //UnitOfWork.CurrentSession.Save(learner); } 你知道为什么吗?我没有启用缓存。我
[Transaction]
public void UpdateLearner(Learner learner)
{
//UnitOfWork.CurrentSession.Save(learner);
}
你知道为什么吗?我没有启用缓存。我知道这与事务有关,因为即使对save方法的调用被注释掉,更改也会被持久化
这是我的映射:
<class name="Learner" table="ILR_Learner">
<id name="Id" column="ILRLearnerID">
<generator class="native" />
</id>
<property column="LastWarning" name="LastWarning" type="DateTime" />
<property column="Submitted" name="SuccessfulSubmission" type="DateTime" />
<join table="vwLearnerLSCUpload">
<key column="ILRLearnerID" foreign-key="ILRLearnerID"/>
<property column="Dog" type="DateTime" name="Dog"/>
</join>
<join table="Learner">
<key column="Id" foreign-key="ILRLearnerID"/>
<property column="Food" name="Food" type="String" length="20" />
</join>
</class>
更新实体时,会自动跟踪更改。因此,当事务被提交时,所有更改的实体都被持久化。无需致电:
Session.Save(entity);
看这个
要禁用每个实体的更改跟踪,必须从会话中逐出该实体:
Session.Evict(entity);
要保留任何更改,请调用:
Session.Update(entity);
有趣。那么,我如何在不保留所有实体的情况下,只保留其中一个实体呢?我希望有一种方法可以全局禁用更改跟踪。Ayende有一个合理的解释,但我找不到。