Как остановить EF от загрузки всего графа объекта - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть модель EF, в которой для ленивой загрузки установлено значение true. Я делаю этот запрос:

public static WorkflowStatus Get(int id)
{
    WorkflowStatus status;
    using (var db = new WorkflowDb())
    {
        status = db.WorkflowStatuses
            .Include("CurrentMappings")
            .Include("CurrentMappings.NextWorkflowStatus")
            .Include("NextMappings")
            .Include("NextMappings.CurrentWorkflowStatus")
            .Include("WorkQueueWorkflowStatusMaps")
            .Include("WorkQueueWorkflowStatusMaps.WorkQueue")
            .FirstOrDefault(x => x.Id == id);
    }
    return status;
}

После того, как я вернул статус, населяют не только эти вещи. Например, каждый WorkQueueWorkflowStatusMap имеет WorkQueue, а WorkQueue имеет коллекцию WorkQueueWorkflowStatusMaps - поэтому загружается бесконечное количество возвратно-поступательных данных. Как мне заставить это остановиться? Когда я возвращаю это через службу WCF на другом уровне, из-за этого возникает исключение.

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Как остановить EF от загрузки всего графа объектов?

По всем этим параметрам вы указали EF загружать весь граф объектов. Каждое включение говорит: загрузите это отношение также.

так что загружается туда и обратно бесконечное количество

Нет. Объекты загружаются только один раз. То, что вы видите, является круговой ссылкой, которая включена в вашу модель. Если ваш WorkQueueWorkflowStatusMap имеет WorkQueue свойство навигации и в то же время WorkQueue имеет WorkQueueWorkflowStatusMap свойство навигации, то вы смоделировали циклическую ссылку, что является абсолютно правильным, пока вы не попытаетесь сериализовать свою сущность = проблему в WCF. В таком случае вы должны сообщить сериализатору , что используются циклические ссылки.

Если вы хотите использовать сериализацию и WCF, вы должны следовать удаленному ответу @ Eranga - отключить отложенную загрузку и создание прокси.

0 голосов
/ 17 января 2017

Остановить глубокую загрузку, добавив .AsNoTracking()

db.WorkflowStatuses.Include(s => s.childObject)
             .AsNoTracking()
0 голосов
/ 16 декабря 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...