我将C#与ASP.NET Core和Entity Framework一起使用来创建RESTful API。 一切运行正常,但是有一种情况我正在尝试解决。
说我下面有这三个班。
public class Car
{
[Key]
public int Id { get; set; }
public int Year { get; set; }
}
public class Option
{
[Key]
public int Id { get; set; }
public int Name { get; set; }
}
public class CarOption
{
[Key]
public int Id { get; set; }
public int Car { get; set; }
public int Option { get; set; }
public int Value { get; set; }
}
问题是当我尝试更新CarOption时,实体框架也会更新相关对象。 我期望只有关系会被更新。这意味着,该框架将丢弃 Option 对象的其他值,而仅使用主键更新 CarOption 表。
例如: 假设以下代码是API生成的JSON的示例。
{
"id":1
"Car":{
"id":1,
"year":2020
},
"option":{
"id":1,
"label":"gear"
},
"value":"manual"
}
如果我更改有效载荷并将选项部分更新为
{
...
"option":{
"id":1,
"label":"gear2"
},
...
}
,即使存在属性id
,这表示对象已经存在,实体框架也将使用新值更新表 Option 。
我正在使用DbContext.CarOption.Update(*payload*)
。
有什么解决方案可以避免这种行为?