2013-07-23 3 views
0

Я использую DbContext.
Висячие внешние ключи для зависимых объектов

Посмотрите на этих двух вариантов кода:

var context = new MyEntities(); 
context.Configuration.LazyLoadingEnabled = false; 

var item = context.Items.OrderBy(i => i.Id).First(); 
var oCtx = (context as IObjectContextAdapter).ObjectContext; 
var relationshipManager = oCtxc.ObjectStateManager.GetRelationshipManager(item); 

И это одна:

var context = new MyEntities(); 
context.Configuration.LazyLoadingEnabled = false; 

var item = context.Items.OrderBy(i => i.Id).First(); 
context.Entry(item);  
var oCtx = (context as IObjectContextAdapter).ObjectContext; 
var relationshipManager = oCtxc.ObjectStateManager.GetRelationshipManager(item); 

Единственным отличием является вызов context.Entry(item);

У меня есть диффере результаты.
В первом случае relationshipManager.Relationships.Count равен 1
Во втором один - 5

Пункта имеет один внешний ключ свойства и RelationshipManager создает оборванный ключ для него. Ничего страшного.

Не должен ObjectContext-запрос для ключей зависимых объектов элемента, который имеет отношение «Один-ко многим?».

Это определенно то, что DbContext.Entry() делает за кулисами, но я, хотя это alredy реализовано ObjectContext.

ответ

0

Он выглядит как запросы ObjectContext для ключей зависимостей, но изначально ничего не делает для нулевых значений (без зависимых элементов - EntityReference.EntityKey = null).
Когда функция ProxyGeneration включена, любой доступ к свойствам навигации запускает генерацию зависающих ключей для таких нулевых значений.
Без прокси добавляются новые отношения для нулевых значений при вызове DbContext.Entry().

Я не знаю, имеет ли это свойство DbContext или ObjectContext такое же поведение. Нужно проверить ...

Смежные вопросы