我正在尝试使用EF4.0更新数据库中的实体,所以我这样做:
_dbctx.AddObject("MyEntities", EntityWithUpdates);
_dbctx.ObjectStateManager.ChangeObjectState(EntityWithUpdates, EntityState.Modified);
_dbctx.SaveChanges();
MyEntities有一个名为StateID的属性。使用debug我可以在将StateID属性添加到上下文时在217的StateID属性中看到正确的值,但是当ObjectStateManager.ChangeObjectState完成时,该值以某种方式更改为0。
有没有人见过这个?
这是实体遇到问题的唯一属性。应该避免使用StateID属性名称还是有解决方法?
我的实体看起来像这样:
public class MyEntity
{
public int ID { get; set; }
public int StateID { get; set; }
}
如果我先从数据库中获取实体。然后应用当前值,一切都非常有效:
MyEntity entity = _dbctx.MyEntities.Where(i => i.ID == id).FirstOrDefault();
_dbctx.ApplyCurrentValues("MyEntities", EntityWithUpdates);
_dbctx.SaveChanges();
这似乎是一个对象图问题,但我仍然希望能够附加实体并保存以避免数据库调用。
我查看了应用程序中的其他几个实体,并认为eran otzap是正确的。正在保存整个对象图,包括State。因为没有加载状态EF即使它有一个有效的ID也想创建它。所以似乎将更改应用于此实体的唯一安全方法是首先从db获取它,应用,然后保存更改。长号。
对于任何可能看到这个的人。 eran otzap建议为StateID应用一个值。他说这可能"可能"工作。在我的情况下,它没有。在EF识别StateID之前,我必须先获取实体。