实体框架核心修改期间的临时值错误

问题描述 投票:1回答:1

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

每次虽然我收到错误:

System.InvalidOperationException:'实体类型'UserData'上的属性'Id'在尝试将实体的状态更改为'Modified'时具有临时值。要么显式设置永久值,要么确保数据库配置为为此属性生成值。

我已经尝试将主键属性设置为生成的数据库,并尽力在数据库中实现它,但我不确定它是否正常工作。我也尝试使用FromSQL方法运行SQL更新,但没有任何改变(当我尝试删除时,我有一个类似的,可能是单独的问题)。

以下是db上下文实现的更新方法:

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绑定到输入字段,因此默认设置为“0”。

c# sql-server asp.net-core entity-framework-core
1个回答
1
投票

尝试

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

如果没有为你工作,那么请分享你的Page.cshtml。

您可能在更新行时更改主键值

© www.soinside.com 2019 - 2024. All rights reserved.