在C#.NET Core 2.1中仅更新分离实体的新字段

时间:2018-10-30 09:37:21

标签: c# .net-core ef-core-2.1

我遇到一种情况,我的API可以接受对象,其中内部数据可以具有所有信息或仅具有ID。现在,如果客户端像示例一样发送对象A

{
"description": "value",
"childA": {
    "id": 123,
    "otherA: {
        "id": 321
    }
},
"childB": {
    "id": 123,
    "otherBNew: {
        "value": "some new text for new record"
    }
}

我希望我的API检测是否将“ id”设置为忽略除子级以外的其他值,以及是否将“ id”子级设置为不查看该值或任何其他字段。上下文有问题。更新是它尝试为未输入的字段插入具有所有值(空值和默认值)的子级数据。另外,孩子有一个“类型”,它是枚举和必需的,但是如果要设置ID,我希望它被忽略。

所有子元素都在同一时间,内部子元素也一样。

{ id: 123, value: "text", childTag: {id: 4, value: "child", childTag: null} }

有没有办法做到这一点?还是我每次都必须从数据库获取数据并且仅更新已更改的字段?

1 个答案:

答案 0 :(得分:0)

如果只想更新设置的字段,则可以实现。最简单的方法是使用JsonPatch将更新应用于您的实体,但是作为一个简单的示例,您可以执行以下操作。

var entity = new YourClass();
entity.id = update.id;
dbContext.Attatch(entity);

现在,所有已更改的字段均已标记,可以单独保存。

entity.Description = "xxxx";

显然,与此相关的问题是您要更新的任何字段都需要检查,以查看该值是否需要更新或浪费时间,可能会重新保存相同的数据。另外,如果您能够使用JsonPatch,则可以将补丁应用到该临时实体,然后保存上下文。

有关JsonPatch的更多信息:

https://dotnetcoretutorials.com/2017/11/29/json-patch-asp-net-core/