C# 如何在实体框架核心中使用私有属性更新模型?

C# 如何在实体框架核心中使用私有属性更新模型?,c#,.net,asp.net-core,entity-framework-core,C#,.net,Asp.net Core,Entity Framework Core,我有一个在Id属性上具有私有setter的模型: public class Guest { public Guid GuestId { get; private set; } = Guid.NewGuid(); } 控制器的功能是: public ActionResult UpdateGuest([FromBody] Guest guest) { _db.Guests.Update(guest); _db.SaveChangesAsync(); return

我有一个在Id属性上具有私有setter的模型:

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创建类的新实例,因此无法更新属性

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

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


最好的解决办法是什么?谢谢你

对于
FromBody
,它使用
Newtonsoft.Json
将Json反序列化为对象

要使
Newtonsoft.Json
反序列化私有属性,您可以尝试以下操作:

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

您想更新
GuestId
属性,还是只更新
Guest
的其他属性?