我有两个表,其中一个(文章)到多个(详细信息)关系。详细信息可能不包含特定条目条目的任何数据。
文章: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。
答案 0 :(得分:1)
实际上有两种方法可以达到这个目的。
Include
方法。使用延迟加载,请参阅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
而不是延迟加载。