12.EF
一般来说,主外键表,主表有一个子表的集合,导航属性
子表里面还有个主表的实例,引用属性
1.默认情况下,导航属性是延迟查询;条件是virtual属性+默认配置
2、关闭延迟查询,子表数据就没了
dbContext.Configuration.LazyLoadingEnabled=false;//关闭延迟查询
3.预先加载 Include 查询主表时就把子表数据一次性查出来
var companyList=dbContext.Set<Company>().include("User").Where(x=>x.Id>20);
4.关闭延迟查询后,如果需要子表数据,可以显示加载
dbContext.Entry<Company>(company).Collection(x=>x.User).Load();
非主外键关系也可以用导航属性
数据插入:A表--B表(包含A的ID)--ID是自增的
一次savechange,如果是主外键关系,可以自动使用自增ID;如果不是,就用不到
事务:1.SaveChange
2.TransactionScope完成一个context的多次SaveChange
3.TransactionScope完成不同context实例的事务
context就相当于一个数据库连接,和数据库交互的上下文
1.一次请求一个context
2.不能一个进程就一个context实例
3.多线程最好多个实例
4.用完尽快释放