悬挂依赖实体的外键

时间:2013-07-23 16:17:46

标签: .net entity-framework-5 dbcontext

我使用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实现的。

1 个答案:

答案 0 :(得分:0)

它看起来像ObjectContext查询依赖项的键,但最初对空值没有任何作用(没有依赖项 - EntityReference.EntityKey = null)。
启用ProxyGeneration时,任何导航属性访问都会触发为此类空值生成悬空键 如果没有代理,则在调用DbContext.Entry()时会添加空值的新关系。

我不知道它是DbContext的功能还是ObjectContext具有相同的行为。需要检查......