gpt4 book ai didi

c# - 更新对象上下文时出错

转载 作者:太空狗 更新时间:2023-10-29 21:24:43 24 4
gpt4 key购买 nike

首先是消息

The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.

当我尝试在 Entity Framework 中插入新数据时出现问题


我的实体模型

enter image description here

在数据库中,我将关系设置为级联删除和更新。这是我对关系所做的唯一改变


我的操作方法:

[HttpPost]
public ActionResult CompleteRegisteration(RegisterViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = new User
{
DisplayName = model.DisplayName,
FullName = model.Name,
Email = model.Email,
};
user.AuthenticationTokens.Add(new AuthenticationToken
{
ClaimedIdentifier = model.ClaimedIdentifier,
DisplayName = model.Email
});
_userRepository.InsertOrUpdate(user);
_userRepository.Save();

return RedirectToAction("Index", "Home");
}

和用户存储库方法:

    private readonly StoryWritingEntities context = new StoryWritingEntities();

public void InsertOrUpdate(User user)
{
context.Users.Attach(user);
context.ObjectStateManager.ChangeObjectState(user,
user.Id == default(int)
? EntityState.Added // if true then this is a new entry
: EntityState.Modified); // if false this is an Existing entry

}
public void Save()
{
context.SaveChanges();
}

问题是由 context.SaveChanges() 引起的,在 users 表中插入了一条记录,但在 AuthenticationTokens 表中没有插入任何内容

最佳答案

如果您只是执行以下操作,就不会发生这种情况:

  context.Users.AddObject(user);
content.SaveChanges();

我怀疑问题的发生是因为 EF 不知道 AuthenticationToken 对象,它没有附加到上下文,因为它被添加到一个断开连接的实体,然后附加到上下文。

您要么需要让 EF 处理整个对象图连接情况,要么您需要自己完成所有工作。像这样混合和匹配是行不通的。

关于c# - 更新对象上下文时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com