2016-10-23 1 views
1

Предположим следующую модель данных:EF Ленивый-Loading: Добавить к навигации имущества без загрузки его

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 в дереве, а затем просто добавить дерево в свой DbContext, не касаясь свойства навигации. Но теперь мне нужно передать мой DbContext.

Как добавить дерево в сад без запуска ленивой загрузки свойства навигации и без переноса ненужных данных?

+0

Либо сделайте свойство 'Trees' не виртуальным, либо отключите' dbContext' lazy. –

+0

У вас есть переход к Саду в классе «Дерево». – Eldho

ответ

1

Если вы используете БД сначала, тогда вы можете только отключить ленивую загрузку для всего контекста. ctx.Configuration.LazyLoadingEnabled = false

При использовании Code First, то убедитесь, что знак вашей ICollection<Tree> Trees не virtual, который затем отключает отложенную загрузку только для этой коллекции.