Entity framework 实体框架中的递归连接

Entity framework 实体框架中的递归连接,entity-framework,asynchronous,entity-framework-core,entity,dbcontext,Entity Framework,Asynchronous,Entity Framework Core,Entity,Dbcontext,假设我有两个实体,文件夹和文件,这是它们的简化结构: File public virtual Folder ParentFolder Folder public virtual List<File> Files 很快我就遇到了一个问题,每当我附加现有文件夹时,它的所有子文件夹都会以附加状态附加。因此,由于我获得了重复的键添加异常,我被迫另外执行类似的操作,以使它们得到未更改的状态: folder.Files.ForEach (file => context.

假设我有两个实体,
文件夹
文件
,这是它们的简化结构:

File
    public virtual Folder ParentFolder

Folder
    public virtual List<File> Files
很快我就遇到了一个问题,每当我附加现有文件夹时,它的所有子文件夹都会以附加状态附加。因此,由于我获得了重复的键添加异常,我被迫另外执行类似的操作,以使它们得到
未更改的
状态:

folder.Files.ForEach (file => context.Attach (File));
但是现在我的图像结构大了一点,我有了另一层,例如
磁盘
。突然间,即使是最简单的保存操作,我也必须运行许多实体,使它们处于
未更改的状态,而这真的很快就失去了控制


使
DbContext
只关心
文件
及其父文件夹
的适当方法是什么,但是完全忽略它的
文件列表
,这样我就不必一直修复它们的状态了?

不想弄乱ID或将任何不应该为null的内容设置为null,所以我最终在
公共虚拟列表文件
上设置了
[notmap]
。我牺牲了从数据库加载文件夹时设置此属性的舒适性(我必须手动执行,但加载操作很少,我主要关心的是连续保存),但现在意外的实体不再进入范围。希望这种方法对处理EF中异步保存的其他人有所帮助。

不想弄乱ID或将任何不应为null的内容设置为null,因此我最终在
公共虚拟列表文件上设置了
[notmap]
。我牺牲了从数据库加载文件夹时设置此属性的舒适性(我必须手动执行,但加载操作很少,我主要关心的是连续保存),但现在意外的实体不再进入范围。希望这种方法对其他在EF中处理异步保存的人有所帮助。

如果您添加了一些内容,那么它的子项也将被添加。我可能会在添加之前将导航属性设置为null,然后将它们重新设置为以前的值。IMHO,关心文件,并在保存时检查
文件夹
磁盘
是否存在。只需设置父ID,不设置父对象。如果添加某些内容,其子对象也将被添加。我可能会在添加之前将导航属性设置为null,然后将它们重新设置为以前的值。IMHO,关心文件并在保存时检查
文件夹
磁盘
是否存在。只需设置父ID,无父对象。
folder.Files.ForEach (file => context.Attach (File));