1

Linq To Entitiesを使用して、2つのオブジェクトm1とm2を取得します。そして、2つの異なるオブジェクトが同じテンプレートテーブルを参照する理由がわかりません。

MConfigOnPage1、MConfigOnPage2とMConfigurationの接続が原因だと思います。多分それはどういうわけか分割されるべきですか?

ERDとコードを添付しました。

なぜこれが起こるのか説明に感謝しますか?

ありがとうございました

var cxt = new Entities();
//this returns MConfiguration with Id=19
var m1 = (from mop in cxt.MConfigOnPage1
          where mop.SiteMapId == 15 && mop.HolderId == 13                                         
          select mop.MConfiguration).FirstOrDefault();
//this returns MConfiguration with Id=40    
var m2 = (from mop in cxt.MConfigOnPage2
          where mop.SiteMapId == 15 && mop.HolderId == 1                                         
          select mop.MConfiguration).FirstOrDefault();
  
var t1 = m1.Holder.Template;
var t1.Code = 13;
var t2 = m2.Holder.Template;
//I expect that **t2.Code** to be 0, but it equals 13
//This behavior tells me that m1 & m2 reference the same Template object, 
//   BUT shouldn't m1 & m2 to have their own Template objects?

ERD

SQL-ERD MConfigurationテーブルデータ

MConfiguration_Content

ホルダーテーブルデータ____________________________________________________________________________ テンプレートテーブルデータ

Holder_Content_____________________________________Template_Content

4

1 に答える 1

0

エンティティへのリンクにより、特定のコンテキスト内で、(DB の主キーによって) 同じエンティティをフェッチすると、同じオブジェクトが取得されます。

テンプレート テーブルから行を複数回選択すると、これと同じ動作が見られます。オブジェクトに対して再クエリを実行すると、常に同じインスタンスが返されます。

これにより、キャッシュによってパフォーマンスが向上し、同じコンテキストで同じオブジェクトを複数回編集しても競合が発生するのを防ぐことができます。

于 2011-03-09T11:22:43.390 に答える