EF 导航属性的使用
程序员文章站
2022-07-13 22:36:51
...
//1 默认情况下,导航属性是延迟查询;
//条件是virtaul属性+默认配置
using (JDDbContext dbContext = new JDDbContext())
{
var companyList = dbContext.Set<Company>().Where(c => c.Id < 20);
foreach (var company in companyList)//只差company
{
Console.WriteLine(company.Name);
foreach (var user in company.Users)//再去查用户
{
Console.WriteLine(user.Name);
}
}
}
//2 关闭延迟加载,子表数据就没了
using (JDDbContext dbContext = new JDDbContext())
{
dbContext.Configuration.LazyLoadingEnabled = false;//关闭延迟查询
var companyList = dbContext.Set<Company>().Where(c => c.Id < 20);
foreach (var company in companyList)//只差company
{
Console.WriteLine(company.Name);
foreach (var user in company.Users)//再去查用户
{
Console.WriteLine(user.Name);
}
}
}
//3 预先加载 Include 查询主表时就把子表数据一次性查出来
//其实自己join也可以的
using (JDDbContext dbContext = new JDDbContext())
{
dbContext.Configuration.LazyLoadingEnabled = false;//是否关闭无所谓
var companyList = dbContext.Set<Company>().Include("Users").Where(c => c.Id < 20);
foreach (var company in companyList)//只差company
{
Console.WriteLine(company.Name);
foreach (var user in company.Users)//再去查用户
{
Console.WriteLine(user.Name);
}
}
}
////4 关闭延迟查询后,如果需要子表数据,可以显示加载
using (JDDbContext dbContext = new JDDbContext())
{
dbContext.Configuration.LazyLoadingEnabled = false;//关闭延迟查询
var companyList = dbContext.Set<Company>().Where(c => c.Id < 20);
foreach (var company in companyList)//只查company
{
Console.WriteLine(company.Name);
dbContext.Entry<Company>(company).Collection(c => c.Users).Load();
//dbContext.Entry<Company>(company).Reference(c => c.Users).Load();
foreach (var user in company.Users)//再去查用户
{
Console.WriteLine(user.Name);
}
}
}
上一篇: EF 增删改查的语句的写法整理
推荐阅读
-
iOS开发中一些手写控件及其相关属性的使用
-
android教程之intent的action属性使用示例(intent发短信)
-
Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变
-
JavaScript中的原型prototype属性使用详解
-
JavaScript中Number.MIN_VALUE属性的使用示例
-
JavaScript中Number.MAX_VALUE属性的使用方法
-
JavaScript中length属性的使用方法
-
html5的自定义data-*属性与jquery的data()方法的使用
-
使用简单的CSS3属性实现炫酷读者墙效果
-
基于IView中on-change属性的使用详解