我有一个需要确定字段是否已更改的调用。但是使用该实体id调用get将返回与先前版本不同的实体。
Entity e = Dao.Get(id);
//At this point e.Field is X
e.Field = y;
Dao.Save(e);
Entity Dao.Get(Guid id)
{
return Session.Get(id);
}
Entity Dao.Save(Entity e)
{
Entity olde = Session.Get(e.Id);
if (e.Field != olde.Field) <--- e.Field == olde.Field so it does not run.
DoBigMethod(e);
return e;
}
如何在不向实体类添加onChange方法的情况下处理这种情况。
答案 0 :(得分:1)
您只知道实体的一个“版本”:当前版本。 实际上只有一个版本的实体。你有它在内存中,你已经改变它,忘记了以前的状态。
调用get来查看以前的数据库状态是危险的。如果已经刷新了更改(例如,NHibernate在查询之前刷新),则会获得更改。如果您打开另一个会话,则会看到其他交易的更改。
你只对一个领域感兴趣吗?然后你可以在某处缓存旧值。
如果这不起作用,您需要告诉我更多有关您需要知道此字段之前值的原因。
编辑:
更多想法: