我有一个案例,我需要在从DB获取之后更改其中一个对象的属性值,但是在更改之后(没有提交对DB的更改),我需要再次查询DB并获得之前的状态在改变之前。
我遇到的当前行为是我在两种状态下获得相同的值(已更改且未更改)。
var app = mApplicationRepository.GetByID(id);
app.ApplicationStatus = (int)AppStatus.Applied;
engine.Parameter = app;
var appPreviousState = applicationRepository.GetByID(app.ID);
engine.PreviousState = appPreviousState;
if (appPreviousState.ApplicationStatus != app.ApplicationStatus)//Allways false
{
//call to some method
}
答案 0 :(得分:2)
您遇到的问题是原始对象(app)附加到当前上下文。当您更改它时,它会将entitystate更改为已修改,但您可以从同一上下文中再次获取它,从而重新加载它。有几种方法可以解决这个问题,但最简单的方法是在从数据库中获取对象后将其从上下文中分离出来。如果要保存更改,则必须再次附加它。
分离对象:http://msdn.microsoft.com/en-us/library/bb738697.aspx
从分离的对象应用更改:http://msdn.microsoft.com/en-us/library/bb896248.aspx
另一种选择是为原始和更新的对象提供单独的上下文。