мне нужно сделать что-то вроде ...Почему EF удаляет дочерние объекты при отсоединении?
- получить контекст дб (UtilitiesContext)
- запрос это для некоторых данных (Подписанные Директории)
- тянуть также детей из БД, когда я тянуть компании WD (AdditionalData)
- Dispose контекста
- Продолжать использовать объекты
...
// step 1
using (var db = new UtilitiesContext(false))
{
var jsonSettings = new JsonSerializerSettings { MaxDepth = 2, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
// step 2
var dirs = db.GetAll<WatchedDirectory>();
// step 3 (lazy load and serialize the WD and its additional data)
log.Debug(JsonConvert.SerializeObject(dirs, jsonSettings));
foreach (var d in dirs)
{
try
{
log.Debug(" Initialising monitoring for path " + d.UNCPath);
// detach the object and its data items from the db
db.Detach(d);
d.AdditionalData.ForEach(i => db.Detach(i));
// here the AdditionalData property serialises an empty array
log.Debug(JsonConvert.SerializeObject(d, jsonSettings));
// step 4 happens down here
Моя проблема заключается в том, что я получаю все данные, которые я хочу на выходе первого журнала (линия, обозначенная шаг 3) А потом, когда я повторяю, что сбор ребенок ушел, и все, что я делал, было отсоединять сущности из контекста.
Мой метод отсоединение выглядит так ...
public void Detach(object entity)
{
Entry(entity).State = EntityState.Detached;
}
Если вы собираетесь использовать контекст, вы должны сначала сопоставить их с DTO. Я считаю, что у вас будет гораздо больше проблем, чем просто, если вы будете следовать своему текущему пути. Работа с объектами сущности вне контекстной области задает проблемы. –
Yeh Я это рассматривал ... это очень простые объекты, хотя я думал, что это возможно, чтобы сохранить дублирование кода. – War
Я пытался сделать подобное в прошлом, и он ВСЕГДА возвращается, чтобы укусить вас в задницу , теперь проще делать сопоставления, чем работать над более поздним моментом времени, когда вам нужно переписать гораздо больший объем кода, когда он, наконец, взорвется на вас. –