实体框架中的递归附加

问题描述 投票:1回答:1

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

File
    public virtual Folder ParentFolder

Folder
    public virtual List<File> Files

现在想象用户正在异步快速地创建多个文件,文件夹等,我当然通过为每个操作创建一个新的DbContext来解决此问题,因此例如,当用户创建文件夹时,我将执行以下操作:

var file = new File (fileModel);
var folder = context.Attach (GetFromInMemoryCacheById (fileModel.FolderId));
file.ParentFolder = folder;
folder.Files.Add (file);
context.SaveChanges ();

很快,我遇到了一个问题,即每当我附加现有文件夹时,其所有子文件夹通常都处于“已添加”状态。因此,由于我获得重复的键添加异常,因此我被迫另外做这样的事情,以便它们获得Unchanged状态:

folder.Files.ForEach (file => context.Attach (File));

但是现在我的结构有点大,我还有另外一层,例如Disk。突然间,即使是最简单的保存操作,我也必须遍历许多实体,以使其处于Unchanged状态,这确实很快失去了控制。

使DbContext仅关心File及其父Folder,但完全忽略它具有的Files列表,这样我就不必一直固定它们的状态的合适方法是什么?] >

假设我有两个实体,文件夹和文件,这是它们的简化结构:文件公共虚拟文件夹ParentFolder文件夹公共虚拟列表现在可以想象...

entity-framework asynchronous entity-framework-core entity dbcontext
1个回答
0
投票

[不想弄乱id或将任何不应该为null的东西都设置为null,所以我最终在[NotMapped]上设置了public virtual List<File> Files。我牺牲了从数据库加载Folder时设置此属性的舒适性(我必须手动执行,但是加载操作很少,主要是我关心连续保存),但是现在意外的实体不再进入范围。希望这种方法对其他在EF中进行异步保存的人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.