Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityFramework.Core:更新实体的正确方法';给定DTO的深度嵌套属性_C#_Entity Framework Core - Fatal编程技术网

C# EntityFramework.Core:更新实体的正确方法';给定DTO的深度嵌套属性

C# EntityFramework.Core:更新实体的正确方法';给定DTO的深度嵌套属性,c#,entity-framework-core,C#,Entity Framework Core,我试图找出如何正确地对给定DTO的实体进行深度更新 我有一门课: DummyModel |- List<Level1> Level1: |- List<Level2> Level2: |- List<Level3> Level3: |- Flat properties dummy模型 |-名单 第1级: |-名单 第2级: |-名单 第3级: |-平面属性 我试图: 使用AgileMapper库,它有一个:这工作非常好,但它是一个主要的开销

我试图找出如何正确地对给定DTO的实体进行深度更新

我有一门课:

DummyModel
 |- List<Level1>

Level1:
 |- List<Level2>

Level2:
 |- List<Level3>

Level3:
 |- Flat properties
dummy模型
|-名单
第1级:
|-名单
第2级:
|-名单
第3级:
|-平面属性
我试图:

  • 使用AgileMapper库,它有一个:这工作非常好,但它是一个主要的开销
  • 通过创建递归函数手动更新实体,“Id感知”通过使用Id对齐实体并手动添加/删除/更新来更新列表

  • 使用:
    context.Entry(entity).CurrentValues.SetValues(dto)
    可以正确理解当我洗牌列表时,实际上没有任何更改,但它不会跟踪级别2或级别3的深层更改

我想知道什么是正确的方法?使用1)AutoMapper或AgileMapper,2)手动更新实体3)使用实体和视图模型之间的实体映射创建视图模型

也许我错过了什么。多谢各位


我做了一个“测试夹具”。

我已经知道了。我的问题是正确的方法是什么?EF是否有内置的解决方案?为什么
context.Entry(entity).CurrentValues.SetValues(dto)
不能按预期工作?问题是,类似的问题总是会被问到。所以,仔细检查一下,选择最适合你的。我已经知道了。我的问题是正确的方法是什么?EF是否有内置的解决方案?为什么
context.Entry(entity).CurrentValues.SetValues(dto)
不能按预期工作?问题是,类似的问题总是会被问到。所以,仔细检查它们,选择最适合你的。