首页 > 解决方案 > 如何在 Entity Framework Core 中更新具有私有属性的模型?

问题描述

我有一个在 Id 属性上有一个私有设置器的模型:

public class Guest
{
    public Guid GuestId { get; private set; } = Guid.NewGuid();
}

控制器功能是:

public ActionResult UpdateGuest([FromBody] Guest guest)
{
    _db.Guests.Update(guest);
    _db.SaveChangesAsync();

    return Ok();
}

但是,当我调用控制器时,它会使用新的 GuestId Guid 创建该类的新实例,因此无法更新该属性。

如果我删除了私有设置器,那么更新功能就可以正常工作,但我觉得更新模型想法并不是真正的最佳实践。

一种解决方案可能是在表单主体中获取一个通用 json 对象,然后更新每个单独的属性,但我认为它并不是真正可扩展的,因为每次模型更新都意味着对控制器的更新。

解决这个问题的最佳方法是什么?谢谢!!!

标签: c#.netasp.net-coreentity-framework-core

解决方案


对于FromBody,它用于Newtonsoft.Json将 json 反序列化为 Object。

Newtonsoft.Json反序列化私有属性,您可以尝试以下方法;</p>

public class Guest
{
    [JsonProperty]
    public Guid GuestId { get; private set; } = Guid.NewGuid();
}

推荐阅读