我遇到一种情况,我的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} }
有没有办法做到这一点?还是我每次都必须从数据库获取数据并且仅更新已更改的字段?
答案 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/