Рабочий процесс моего приложения довольно прост:
Для данной связки скриптов
- взять сценарий
- разобрать
- получить соответствующий граф объекта из db
- обновить или создать новый, если граф не найден
- сохранить изменения
- отсоединение графа от контекста объекта для GC может убить граф
Последний элемент списка не нужен, если для каждого скрипта создается контекст объекта, но он влияет на производительность, более того, я хочу, чтобы некоторые сущности сохранялись в контексте, а другие собирались GC.
Я думал о ручном отсоединении сущностей:
foreach (var desc in component.Descriptions)
context.ComponentDescription.Detach(desc);
context.Components.Detach(component);
Такое перечисление подразумевает db-запросы в случае включенной отложенной загрузки. Это совсем не хорошо.
Я нашел такой способ, как взломать:
var entities = context.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged).Where(
e => !(e.Entity is ComponentType));
entities.Iterate(e => e.ChangeState(EntityState.Detached));
Ну, это не отрыв графика, но я просто знаю, что могу сделать это в моем случае. Но что, если мне нужно работать с определенным графиком, как я могу отсоединить связанные свойства, не беспокоясь о БД?