EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading)、贪婪加载 (Eager Loading)以及显示加载。
一、EF Core 1.1
1.当前的版本,还不支持延迟加载(Lazy Loading),不将来是否支持
2.目前支持贪婪加载:使用Include加载 关联表 的数据,这种方式 使用一条Join的 Sql语句进行查询。
3. 贪婪加载的优势在于仅执行1次SQL查询即返回所需要的结果。但使用JOIN查询在数据库记录条数较多时,多条简单的SQL查询往往比一条复杂的JOIN查询效率要好。
Include语句可以在 一次查询中使用多次 :
ctx.Categories .Include(c => c.Products) .Include(c => c.News);
4.限制加载的方式暂时忽略使用。
二、EF Core 中主外键设置
1.使用数据注释,DataAnnotations模式,这种方式适合Code First或者说手写实体类和自定义主外键 关联。
Menu表
[Table("Menu")] public partial class Menu { [Key] public int MenuID { get; set; } public string MenuName { get; set; } public string LinkUrl { get; set; } public DateTime AddTime { get; set; } public int SortNumber { get; set; } public int ModelID { get; set; } [ForeignKey("ModelID")] public virtual Model Model { get; set; } }