0

私はDbContextを使用しています。

次の 2 つのコードのバリエーションを見てください。

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 に等しい
2 番目のケースでは - 5

Item には 1 つの外部キー プロパティがあり、RelationshipManager はそれに対してダングリング キーを作成します。それで大丈夫です。

ObjectContext は、「1 対多」の関係を持つ項目の依存エンティティのキ​​ーを照会するべきではありませんか?

それは間違いなくDbContext.Entry()舞台裏で行われていることですが、これはすでに ObjectContext によって実装されています。

4

1 に答える 1

0

依存関係のキーに対する ObjectContext クエリのように見えますが、最初は null 値に対しては何もしません (依存アイテムなし - EntityReference.EntityKey = null)。
ProxyGeneration が有効になっている場合、ナビゲーション プロパティにアクセスすると、そのような null 値のダングリング キーの生成がトリガーされます。プロキシがないと、が呼び出さ
れたときに null 値の新しい関係が追加されます。DbContext.Entry()

DbContext の機能なのか、ObjectContext の動作が同じなのかはわかりません。チェックする必要があります...

于 2013-07-23T17:10:48.560 に答える