首页新闻找找看学习计划

ef6 codefirst 多对多关系如何在查询时包含实体的引用对象

0
悬赏园豆:50 [待解决问题]

例如有3个实体

public class A
{
    public string Id {get; set;}
    public List<B> BList {get; set;}
}

public class B
{
    public string Id {get; set;}
    [ForeignKey("CObj")]
    public string CId {get; set;}
    public C CObj {get; set;}

    public List<A> AList {get; set;}
}

public class C
{
    public string Id {get; set;}
    public string Desc {get; set;}
}

 

在查询时 我使用如下linq

using(var db = new MyContext())
{
    var linq = db.Set<A>().Include(e=>e.BList).Where(e=>e.Id == "exampleId").FirstOrDefault();
}

 

得到的实例A中的BList有内容,但是BList所有B实例的C属性是null。有没有办法能够把C对象也包含进来?有的话linq要怎么写?

被打包托运的胖胖的主页 被打包托运的胖胖 | 初学一级 | 园豆:152
提问于:2014-04-08 14:54
< >
分享
所有回答(3)
0

何必这么累,用用Moon.Orm

月明时勤 | 园豆:746 (小虾三级) | 2014-04-08 15:47

没办法啊,领导要求用ef的codefirst

支持(0) 反对(0) 被打包托运的胖胖 | 园豆:152 (初学一级) | 2014-04-09 11:49
0

public virtual  C CObj {get; set;}  延迟加载  试下

黑峰 | 园豆:544 (小虾三级) | 2014-04-09 10:09

延迟加载关掉了,延迟加载对于cs来说没啥用。。。

支持(0) 反对(0) 被打包托运的胖胖 | 园豆:152 (初学一级) | 2014-04-09 11:50

@被打包托运的胖胖: 延迟加载对于cs来说没啥用。。 不太理解 ,能不能给解释下?

支持(0) 反对(0) 黑峰 | 园豆:544 (小虾三级) | 2014-04-09 11:54

@黑峰: 延迟加载直白点说的话是在ToList()的时候去查询数据。当client调用服务时,服务需要马上把数据查出来,然后返回给client。因此client和服务可以说是即查即用的。

支持(0) 反对(0) 被打包托运的胖胖 | 园豆:152 (初学一级) | 2014-04-09 20:23

@被打包托运的胖胖: 感觉咱们理解的不一样,我的理解是延迟加载在你用到此数据的时候会自动再去查询数据,跟ToList()没啥关系,当服务用到此数据的时候会自动再次去查询导航属性。你可以试一下,别禁用延迟加载  看能否调出C属性

支持(0) 反对(0) 黑峰 | 园豆:544 (小虾三级) | 2014-04-10 10:58
0

因为你没有加载B 类型的C属性值额,

平常心队长 | 园豆:1113 (小虾三级) | 2014-04-09 16:04

我知道没有include B类型的C属性值。不知道怎么写...orz

支持(0) 反对(0) 被打包托运的胖胖 | 园豆:152 (初学一级) | 2014-04-09 20:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册