为了更好地说明我的观点,我简化了代码。我需要有一些业务逻辑,我测试一个属性是否已经从a更改为b。我面临的问题是我正在操作的实体附加到我的DBContext。如果我在我引用的一个更新属性的另还更新:实体框架在内存实体中与保存的实体进行比较
....
var oldEntity = context.Find(x);
var updatedEntity = context.Find(x);
//here updatedEntity.IntProperty is 6
updatedEntity.IntProperty = 7;
//here both oldEntity.IntProperty and updatedEntity.IntProperty
//are now 7 so my test isn't hit
if(oldEntity.IntProperty != updatedEntity.IntProperty &&
updatedEntity.IntProperty == 7)
{
....
有一些简便的方法做我想做的,同时使连接到的DbContext这个实体的比较?
您可能想看看ObjectStateManager。它缓存加载的属性。请参阅http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager.aspx – Andez
我正在使用DBContext而不是ObjectContext。有没有办法从DBContext访问ObjectStateManager? –
@BenTidman将您的DbContext转换为具有基础ObjectContext的IObjectContextAdapter,然后使用其属性ObjectStateManager。 –