假设我有两个实体,Folder
和File
,这是它们的简化结构:
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文件夹公共虚拟列表
[不想弄乱id或将任何不应该为null的东西都设置为null,所以我最终在[NotMapped]
上设置了public virtual List<File> Files
。我牺牲了从数据库加载Folder时设置此属性的舒适性(我必须手动执行,但是加载操作很少,主要是我关心连续保存),但是现在意外的实体不再进入范围。希望这种方法对其他在EF中进行异步保存的人有所帮助。