我使用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
Item有一个外键属性,RelationshipManager为它创建悬空键。那没关系。
不应该ObjectContext查询具有“一对多”关系的项目的从属实体的键
这绝对是DbContext.Entry()
在幕后所做的事情,但我认为这是由ObjectContext实现的。
答案 0 :(得分:0)
它看起来像ObjectContext查询依赖项的键,但最初对空值没有任何作用(没有依赖项 - EntityReference.EntityKey = null)。
启用ProxyGeneration时,任何导航属性访问都会触发为此类空值生成悬空键
如果没有代理,则在调用DbContext.Entry()
时会添加空值的新关系。
我不知道它是DbContext的功能还是ObjectContext具有相同的行为。需要检查......