Linq外键选择

时间:2015-03-17 03:03:46

标签: c# linq entity-framework-6

我有两个表,其中一个(文章)到多个(详细信息)关系。详细信息可能不包含特定条目条目的任何数据。

文章:Id,Title,Numb(PK),姓名

详情:Id(PK),Person,Numb(FK),姓名

在Entity Framework中,有适当的Navigation属性,它显示正确的One:Many关系。

我想要做的是获取与最终用户的查询匹配的所有文章(通过“名称”)以及详细信息表(Id,Person,Numb,Name)中的所有数据(如果有)。

我现在坚持的是我现在可以查询文章(var article = db.Articles.Where(b => b.Name.Equals(name));),但结果确实包含了每行文章中的Details.Numb的HashSet,那里没有数据HashSet的。 Article.Numb =>数据库中有适当的相应条目。 Details.Numb。

4 个答案:

答案 0 :(得分:1)

实际上有两种方法可以达到这个目的。

  1. 启用延迟加载。
  2. 如其他答案所述,调用Include方法。
  3. 使用延迟加载,请参阅msdn article了解更多详情。

        db.ContextOptions.LazyLoadingEnabled = true;
    

    使用包含方法

        var article = db.db.Articles.Include("Details").Where(b => b.Name.Equals(name))).FirstOrDefault();
    

答案 1 :(得分:0)

您需要告诉EF在执行查询(并关闭连接)后在结果集中包含详细信息:

var article = db.Articles
    .Include("Details")
    .Where(b => b.Name.Equals(name))
    .FirstOrDefault();

答案 2 :(得分:0)

在导航属性上使用.Include(),它会将整个内部对象带入查询结果中。只有从内部对象中过滤或选择项目时才会自动执行,否则您必须手动请求包含。

答案 3 :(得分:0)

示例:

var allProducts = _db.Products.Include(d => d.Producer).ToList();

如果您不确定,请始终使用Include而不是延迟加载。