【问题标题】:How To Update A Model With Private Properties in Entity Framework Core?如何在 Entity Framework Core 中更新具有私有属性的模型?
【发布时间】:2019-11-05 04:02:01
【问题描述】:

我有一个模型在 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 对象,然后更新每个单独的属性,但我认为它并不是真正可扩展的,因为每次模型更新都意味着对控制器的更新。

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

【问题讨论】:

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

标签: c# .net asp.net-core entity-framework-core


【解决方案1】:

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

要让Newtonsoft.Json反序列化私有属性,可以试试下面的方法;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多