Ela*_*nda 7 c# asp.net-mvc entity-framework-4
我正在尝试更新现有实体.
我有以下代码:
public MamConfiguration_V1 Save(MamConfiguration_V1 item)
{
mMaMDBEntities.MamConfiguration_V1.Attach(item);
mMaMDBEntities.ObjectStateManager.ChangeObjectState(item, System.Data.EntityState.Modified);
mMaMDBEntities.SaveChanges();
return item;
}
Run Code Online (Sandbox Code Playgroud)
但是这些Attach方法抛出异常:
发生了引用完整性约束违规:定义引用约束的属性值在关系中的主体和从属对象之间不一致.
我怎样才能解决这个问题?
好像你与外键字段和导航属性有一些关系item,并且这些字段具有冲突的值.当您加载实体及其相关实体,在一端更改关系,仅将该端标记为Modified并尝试保存时,会发生这种情况.确保修改两端的关系并Modified在调用之前标记所有受影响的实体SaveChanges.
我在不同的情况下遇到了这个异常,我在这里发帖是因为在搜索错误消息时出现了这个问题。
IObjectContextAdapter.ObjectContext.AttachTo(entitySetName, entity)使用部分加载的实体调用时抛出异常。实体上的外键已定义,但未加载导航属性。(也就是说,O.ItemID有一个值,但O.Item为空)。具体情况不允许O.Item加载。
问题原来是对象状态管理器已经在一个单独的方法中加载了对象,并且已经在跟踪使用相同键定义的对象。由于单独的方法不需要跟踪对象状态,因此通过IQueryable.AsNoTracking()在该方法内调用解决了该问题。
item 对象的定义是什么?似乎在它的一些与其他实体建立关系的集合中存在某种类型的冲突。您可以尝试清除所有集合以查看问题是否仍然存在,但在这种情况下您丢失了外键分配。但也许它可以帮助您找到问题所在。
这可能是一个提示。当我尝试将现有实体附加到上下文时,我通常执行以下操作:
mMaMDBEntities.Entry<MamConfiguration>(item).State = System.Data.EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
您可以添加 System.Data 的使用,以避免一直需要编写它。
这会将实体附加到您想要的状态,在本例中进行修改并跟踪更改。这是一行而不是两行。
| 归档时间: |
|
| 查看次数: |
30860 次 |
| 最近记录: |