Заполните свойство в параметрах загрузки из дочернего объекта - PullRequest
3 голосов
/ 30 декабря 2010

Я использую Linq to sql для заполнения моего объекта. Ранее я использовал отложенную загрузку, а затем перебирал свой список, получая доступ к дочерним объектам для принудительной загрузки. Это не очень хорошее решение с большим набором данных, который у меня есть, поэтому сейчас я устанавливаю LoadOptions в моем контексте данных, чтобы сначала получить все это.

Одна проблема, с которой я столкнулся, заключается в том, что до того, как я вручную загружал по одному свойству на каждой итерации в моем списке, я не уверен, как это сделать сейчас. Это просто строковое значение.

 info.CreatedByName = info.CreatedBy.Name;

В моем контексте данных я задаю параметры загрузки следующим образом:

 DataLoadOptions loadOptions = new DataLoadOptions();
 loadOptions.LoadWith<Info>(info => info.Owner);
 loadOptions.LoadWith<Info>(info => info.CreatedBy);

Есть ли способ указать назначение этого свойства в моих параметрах загрузки? Что-то вроде:

 loadOptions.LoadWith<Info>(info => info.CreatedByName)

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Я не думаю, что вы можете использовать LoadOptions таким образом. Вы можете использовать класс проекционного контейнера, если вам не нужно отслеживать объект, и явно установить это свойство при создании.

from info in context.Infos
select new InfoContainer
{
    CreatedByName = CreatedBy.Name
}

Вы можете добавить частичный класс для Info и добавить свойство, которое ссылается на CreatedBy.Name

public string CreatedByName
{
    get
    {
        return CreatedBy.Name;
    }
}

Это предполагает, что CreatedBy загружен, или ленивый загрузите его, если он не заполнен.

1 голос
/ 30 декабря 2010

Все, что вы делаете, абсолютно корректно, но вы должны явно выбрать CreatedBy в своем запросе после установки параметров контекста LoadWith, например,

var result = from info in context.Infos
             join user in context.Users on info.CreatedById equals user.Id
             select info;

У меня была такая же проблема, проверьте это решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...