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

Item 有一个外键属性,RelationshipManager 为其创建悬空键。没关系。

ObjectContext 不应该查询具有“一对多”关系的项目的依赖实体的键吗?

这绝对是DbContext.Entry()幕后所做的,但我虽然这已经由 ObjectContext 实现。

4

1 回答 1

0

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

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

于 2013-07-23T17:10:48.560 回答