Как в EF 4.1 активно загружаться, как я могу загрузить несколько связей одного и того же уровня? - PullRequest
4 голосов
/ 23 февраля 2012

Я, кажется, озадачен вероятным простым решением.Обычно я использовал отложенную загрузку в EF 4.1 и сейчас пытаюсь использовать готовую загрузку в своем приложении, чтобы я мог без проблем использовать встроенный сериализатор JSON.У меня проблема в том, что я не могу понять, как использовать .Include () для загрузки нескольких связей внуков одного уровня.

public class Canvas
{
    public int ID { get; set; }
    public string Name { get; set; }

    public ICollection<ContentArea> Contents { get; set; }
}

public class ContentArea
{
    public int ID { get; set; }
    public int CanvasID { get; set; }
    public string Name { get; set; }

    public ICollection<TextContent> TextContents { get; set; }
    public ICollection<ImageContent> ImageContents { get; set; }
}

public class TextContent
{
    public int ID { get; set; }
    public int ContentAreaID { get; set; }
    public string Text { get; set; }
    public int Color { get; set; }
}

public class ImageContent
{
    public int ID { get; set; }
    public int ContentAreaID { get; set; }
    public string Filename { get; set; }
}

Я пробовал следующее безуспешно.Как я могу написать код загрузки для загрузки TextContents и ImageContents?

Не компилируется:

var c = dataContext.Canvases
        .Include(ca => ca.Contents.Select(co => co.ImageContents).Select(co => co.TextContents))
        .FirstOrDefault();

Не работает, второй Сначала включают переопределения:

var c = dataContext.Canvases
        .Include(ca => ca.Contents.Select(co => co.ImageContents))
        .Include(ca => ca.Contents.Select(co => co.TextContents))
        .FirstOrDefault();

Не работает, выдает исключение времени выполнения:

var c = dataContext.Canvases
        .Include(ca => ca.Contents.Select(co => new { co.ImageContents, co.TextContents }))
        .FirstOrDefault();

Редактировать:

Пока я отказался от этого подхода и только что создал модели представления на основе некоторых других статей и подходовони решили проблему «сериализации моделей сущностей» с помощью встроенной в JSON сериализации ASP.NET MVC.Это заставило меня дублировать мои классы, но это стало легко благодаря использованию библиотеки AutoMapper для автоматической передачи всех данных вперед и назад.

1 Ответ

3 голосов
/ 23 февраля 2012

Мне удалось набрать следующие коды

var contents = db.Canvases
                 .Include(c=>c.Contents.Select(co=>co.TextContents))
                 .Include(c=>c.Contents.Select(co=>co.ImageContents))
                 .ToList();
...