2011-03-09 83 views
1

我使用Linq To實體獲得2個物體m1 & m2。 而我不明白爲什麼2個不同的對象參考相同的表模板表。爲什麼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

回答

0

鏈接到實體確保,給定的範圍內,如果您獲取相同的實體(在DB主鍵),你會得到相同的對象。

您會看到同樣的行爲是您多次從模板表中選擇了該行。每當你重新查詢任何對象時,你總是會得到相同的實例。

這可以通過緩存提供性能優勢,並防止在同一上下文中導致衝突的同一對象的多次編輯。

+0

m1&m2是從** DIFFERENT **表中提取的,它們如何具有相同的對象? – theateist 2011-03-09 11:29:15

+0

它也是我所指的Template類型的對象。在你的例子中,t1和t2都指向Template表中的同一行。試試m1.Holder == m2.Holder && m1.Holder.Template == m2.Holder.Template。 – 2011-03-10 22:26:59

相關問題