Есть ли способ заполнить свойства навигации без сохранения объекта в базе данных? - PullRequest
0 голосов
/ 21 июня 2019

Допустим, у меня есть объект PersonEntity со свойством EyeColorId и свойством навигации типа EyeColorEntity.Есть ли способ предварительной выборки EyeColorEntity без сохранения сущности и без запроса EyeColor.

Пример.

public class PersonEntity
{
    public int Id { get; set; }
    public int EyeColorId { get; set; }
    public EyeColorEntity EyeColor { get; set; }
}

public void FillFromDbExample(DbContext context)
{
    var personEntity = new PersonEntity()
    {
        EyeColorId = 5
    };
    context.SetNavigationProperties(personEntity);
}

Теоретически это будет заполнять свойство навигации наюридическое лицо.Результат будет выглядеть примерно так:

personEntity =
{
    EyeColorId = 5,
    EyeColor =
    {
        Id = 5,
        Color = "Blue"
    }
}

Хитрость в том, что я не хочу запрашивать индивидуально для каждого свойства и не хочу сохранять сущность в базе данных.чтобы вернуть эти свойства обратно.Существует ли что-то вроде описанной функциональности в EnityFramework 6.2.0.

1 Ответ

1 голос
/ 21 июня 2019

Вы можете предварительно загрузить все свойства в контексте, чтобы заставить исправить отношения работать.Например:

context.EyeColors.Load();
var personEntity = new PersonEntity()
{
    EyeColorId = 5
};
context.Persons.Attach(personEntity);

В последнем операторе EF автоматически заполняется personEntity.EyeColor.

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

public virtual EyeColorEntity EyeColor { get; set; }

Тогда:

var personEntity = context.Persons.Create(); // Creates a proxy
personEntity.EyeColorId = 5;
context.Persons.Attach(personEntity);

Теперь EF будет запрашивать соответствующий EyeColor из базы данных при обращении к personEntity.EyeColor(= отложенная загрузка).

Я не хочу запрашивать индивидуально для каждого свойства

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

Обратите внимание, что в обоих случаях personEntity должен быть присоединен к контексту.

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