Давайте предположим, что у меня есть две сущности, 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
, который у него есть, так что мне не придется все время исправлять их состояния?