为什么2个不同的实体引用同一个对象?

时间:2011-03-09 11:09:59

标签: sql linq linq-to-entities erd

我使用 Linq To Entities 来获取2个对象m1&平方米。 我不明白为什么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

1 个答案:

答案 0 :(得分:0)

实体链接确保在给定的上下文中,如果您获取相同的实体(通过DB中的主键),您将获得相同的对象。

您将看到同样的行为是您多次从模板表中选择了行。每当您重新查询任何对象时,您将始终返回相同的实例。

这通过缓存为您提供了性能优势,并防止对同一上下文中的同一对象进行多次编辑而导致冲突。