2011-09-01 58 views
0

我有一个ObjectContext与更新方法。该方法将一个通用对象作为参数。我需要将此对象附加到ObjectContext并使用对象所具有的更改来更新数据库。例如,我创建了一个与数据库中的键和实体具有相同键的新对象,但其中一些字段是不同的。我想将对象附加到数据库中相应的实体,并让它保存新对象所做的更改。以下是我在更新方法:
ObjectContext从分离状态更新对象

public void Update(BaseObject data, entitySetName) 
{ 
    AttachTo(entitySetName, data); 
    Refresh(RefreshMode.ClientWins, data); 
    SaveChanges(); 
} 

刷新后,得到的数据从数据库中的字段覆盖。退出刷新也不会更新数据库记录。我错过了一步吗?

回答

4

如果进行了任何更改,则DetectChanges()方法将更新entitystate以进行修改。

MSDN:“在POCO实体没有跟踪改变的代理,的经修饰的性质的改变,以修改当DetectChanges方法被称为改变被保存后,对象的状态变化的状态下,以不变。”

context.DetectChanges(); 

另外,你可以只设置状态来修改,以便您的方法总是改掉更新,无论是否有任何改变或不:

ObjectStateManager.ChangeObjectState(data, EntityState.Modified); 
+0

我添加了ApplyOriginalValues(entitySetName,data);刷新之后,刷新之前和删除之前刷新所有与之前使用数据库中更新值更新的结果相同的结果。 – MBU

+0

我认为这是反正...我编辑上面。您可以在保存之前使用Context.DetectChanges(),或者告诉状态管理员您的数据已被修改。 –

1

使用简单:

public void Update(BaseObject data, entitySetName) 
{ 
    AttachTo(entitySetName, data); 
    ObjectStateManager.ChangeObjectState(data, EntityState.Modified); 
    SaveChanges(); 
} 
相关问题