首页新闻找找看学习计划

关于EF,自动关联子对象的问题?

0
悬赏园豆:5 [已解决问题] 解决于 2017-01-17 12:03

Class A{
public int ID{get;set;}
public string s{get;set;}
}

 


Class B{
public int aID { get; set; }
[ForeignKey("aID")]
public A a { get; set; }
public int ID{get;set;}
public string s{get;set;}
}


using(var context =new XXXXDbContext())

{


//此时bList 集合当中的每一个 a对象 里面对象 A 是为null,是没有任何问题
var bList =context.BBBs.Where(C=>C.aID=2).ToList();


//但是如果此时在 查询 A对象 ID=2的, 上面bList 里面的A 对象就有值了,这是为什么呢?而且,我也观察了,这两条代码执行出的sql 语句,都是单表查询的
var aList= context.AAAs.Where(C=>C.ID).FirstOrDefault();


}

//用了 AsNoTracking()当可以解决,这个问题,但是原因是什么呢? 麻烦哪位大神,能够解释一下,非常感谢

K-Show的主页 K-Show | 初学一级 | 园豆:5
提问于:2017-01-12 10:57
< >
分享
最佳答案
1

ef的懒加载功能。

查询出b对象的时候,其实a对象还没有值。你在调试的时候点开对象看的时候才从数据库加载a对象。

 

收获园豆:5
czd890 | 大侠五级 |园豆:7463 | 2017-01-12 13:47

我没有点开调试对象,一旦执行第二条代码时,就会加载A对象,那我该如何避免这种情况出现呢。

K-Show | 园豆:5 (初学一级) | 2017-01-12 17:11

@K-Show: 

没有点开调试对象,一旦执行第二条代码时。怎么看出来的呢?跟踪sql?

czd890 | 园豆:7463 (大侠五级) | 2017-01-12 21:31

懒加载  a对象加个virtual

czd890 | 园豆:7463 (大侠五级) | 2017-01-12 21:32
其他回答(2)
0

你是在 Vistual Studio 调试器中观察的吧?

dudu | 园豆:41066 (高人七级) | 2017-01-12 14:20
0

感觉像是同一个数据上下文对象里面自己关联的,我对EF不是很熟,但觉得是EF认为你在加载bList 下面A对象的数据。

盟怀部孩 | 园豆:878 (小虾三级) | 2017-01-13 11:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册