NHibernate Evict按类型和Id从第一级缓存

时间:2012-05-22 08:08:07

标签: c# nhibernate caching

我有一个名为Car的Nhibernate对象,这个Car对象有一个名为Doors的PersietentBag IList集合,所有这些都是延迟加载的。

如果我这样做(在会议1中)

int singleDoor = Car.Doors[0];

lazyest集合从db加载并且相关对象被添加到第一级缓存中,i将在第一级缓存N对象Car和N Doors从db加载。

从另一只手(在代码IN SESSION 2的其他部分)我加载相同的Car对象并做同样的分配

int singleDoor = Car,Doors[0];

和我从SESSION2驱逐汽车和所有门对象

我修改了这个对象的状态,并希望附加doscontected对象,将SESSION1附加到save nd do

mySession.Update(Car);

但是当我尝试更新门(s)obejcts显然我有(另一个具有相同id等的obejct)异常被抛出,因为还有另一个具有相同id的对象。

很难找到要驱逐的旧对象,我怎样才能对旧对象进行EVICT或清除第一级缓存(仅按类型和ID)或从缓存中丢弃旧对象并更新我想要的内容?

提前感谢。

1 个答案:

答案 0 :(得分:3)

这不是因为二级缓存,而是因为你试图在会话2中加载已经在会话1中加载的实体(实际上它是引起这种情况的第一级缓存)。

您的问题的答案是使用(在会话1中),session.Evict(汽车),但这不是真正的最佳方法 - 我宁愿建议使用session.Merge(car)来更新持久对象会话1没有抛出有关具有相同id的另一个对象的异常。