gpt4 book ai didi

c# - Entity Framework Core 修改期间的临时值错误

转载 作者:行者123 更新时间:2023-11-30 17:26:45 26 4
gpt4 key购买 nike

我一直在学习 ASP.NET Core 和 Entity Framework Core 的教程。我能够连接到我的 Microsoft SQL Server 数据库并获取和添加行,但我无法更新它们。我的更新方法附加了一个新用户,然后将状态设置为已修改。

虽然我每次都收到错误:

System.InvalidOperationException: 'The property 'Id' on entity type 'UserData' has a temporary value while attempting to change the entity's state to 'Modified'. Either set a permanent value explicitly or ensure that the database is configured to generate values for this property.'

我已经尝试将主键属性设置为数据库生成,并尽我所能在数据库中实现它,但我不确定它是否有效。我还尝试使用 FromSQL 方法运行 SQL 更新,但没有任何改变(当我尝试删除时,我遇到了类似且可能不同的问题)。

这是来自数据库上下文实现的更新方法:

public UserData Update(UserData updatedUser)
{
var entity = db.Users.Attach(updatedUser);
entity.State = EntityState.Modified;

//db.Users.FromSql<UserData>($"UPDATE Users SET user_name={updatedUser.user_name}, first_name={updatedUser.first_name}, last_name={updatedUser.last_name}, age={updatedUser.age}, email={updatedUser.email} WHERE");
return updatedUser;
}

我在另一个方法中保存更改,该方法在此方法之后直接调用。

这是我的数据模型:

public class UserData
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int64 Id { get; set; }
public string user_name { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public int age { get; set; }
public string email { get; set; }
}

基本上我只是想用新信息更新用户,我正在尝试使用附件和实体。修改我正在关注的教程中使用的方法,但如果有更好的方法,我也愿意接受。

编辑:解决方案在我标记为答案的评论中。在我的 .cshtml 页面上,我没有将用户的 ID 绑定(bind)到输入字段,因此默认情况下它被设置为“0”。

最佳答案

如果您尝试添加具有不存在的外键的实体,也会发生此异常。

关于c# - Entity Framework Core 修改期间的临时值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55911837/

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