#c# #entity-framework #linq-to-sql
#c# #entity-framework #linq-to-sql
Вопрос:
Предположим, что следующая модель данных:
class Garden
{
int ID;
ICollection<Tree> Trees;
string Address;
}
class Tree
{
public int ID;
public float Size;
}
Давайте посадим несколько деревьев:
var gardens = dbContext.Gardens.Take(10).ToList();
foreach (var g in gardens)
g.Trees.Add(new Tree());
Но теперь каждая ссылка на g.Trees
запускает запрос к базе данных из-за отложенной загрузки. Я мог бы сделать .Include(garden => garden.Trees)
при извлечении садов, но тогда я переношу все существующие деревья.
Я мог бы создать столбец GardenID в Tree, а затем просто добавить Дерево в мой DbContext, не касаясь свойства навигации. Но теперь мне нужно передать мой DbContext по кругу.
Как я могу добавить дерево в сад, не вызывая отложенную загрузку свойства навигации и не передавая ненужные данные?
Комментарии:
1. Либо сделайте
Trees
свойство невиртуальным, либо отключитеdbContext
отложенную загрузку.2. Есть ли у вас навигация по саду в
Tree
классе.
Ответ №1:
Если вы сначала используете DB, то единственный вариант — отключить отложенную загрузку для всего контекста. ctx.Configuration.LazyLoadingEnabled = false
Если сначала используете код, убедитесь, что у вас есть пометка ICollection<Tree> Trees
is not virtual
, которая затем отключает отложенную загрузку только для этой коллекции.