我之前有一个更详细的问题,但我没有答案,我将以更简单的方式提出同样的问题:
我有一个带有另一个表的外键的 EF 数据库。
我想更新一个ENTITY。但我需要这样,我将在下面编写代码:
- 转到数据库并通过 id检索成员,返回 EF 成员对象
- 对EF上下文之外的对象进行一些更改
- 将MODIFED EF 成员发送到 Save 方法
- 在 BL 层保存方法使用上下文并保存更改。
1)
MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);
2)
NewMember.FirstName = "NewFirstName";
NewMember.LanguageId = 1;
3)
currentMemberManager.Save(NewMember);
4)
public void Save2(Member newMember)
{
using (var Context = new NoxonEntities())
{
Member existingMember = Context.Member.First(c => c.Id == newMember.Id);
existingMember.FirstName = newMember.FirstName;
existingMember.Language = Context.Language.First(c => c.Id == newMember.LanguageId);
Context.SaveChanges();//In here I get the error below
}
}
对数据库的更改已成功提交,但在更新对象上下文时出错。ObjectContext 可能处于不一致的状态。内部异常消息:发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和依赖对象之间不一致。
注意:您可以建议发送一个不同的类(例如:公共类 MyMember),它具有所有必要的属性并且与 EF 完全分离。但这需要做很多工作才能将所有 EF 对象转换为我的单独类。我对吗?
我希望有一种方法可以分离实体,只要足够长的时间让我修改它并将值保存到数据库中。(另外,我尝试了完全不更新行的 Detach 方法)
我已经尝试解决这个问题好几个小时了。
请帮助我更好地理解它,我真的需要一个解决方案。非常感谢任何有想法的人。