.NetCore中EFCore的使用整理(二)-关联表查询

.NetCore中EFCore的使⽤整理(⼆)-关联查询
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; }
}
View Code
Model表
[Table("Model")]
public partial class Model
{
public Model()
{
this.Menus = new HashSet<Menu>();
}
[Key]
public int ModelID { get; set; }
public string ModelName { get; set; }
public int SortNumber { get; set; }
public DateTime AddTime { get; set; }
public virtual ICollection<Menu> Menus { get; set; }
}
View Code
上下⽂类
public class MenuModelContext : DbContext
{
public virtual DbSet<Menu> Menus { get; set; }
public virtual DbSet<Model> Models { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)复合添加剂
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;database=MenuModel;Trusted_Connection=True;");        }
}
View Code
2.使⽤Fluent API模式,这种⽅式,是⾃动DBFirst⾃动⽣成实体层的默认⽅式
Menu表
public partial class Menu
{
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; }
public virtual Model Model { get; set; }
}
View Code
Model表
public partial class Model
{
public Model()
{
Menu = new HashSet<Menu>();
}
public int ModelId { get; set; }
public string ModelName { get; set; }
public int SortNumber { get; set; }
public DateTime AddTime { get; set; }
public virtual ICollection<Menu> Menu { get; set; } }
View Code
上下⽂类:
public partial class MenuModelContext : DbContext
{
public virtual DbSet<Menu> Menu { get; set; }
public virtual DbSet<Model> Model { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
宝马案
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;database=MenuModel;Trusted_Connection=True;");    }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
海水螺旋藻modelBuilder.Entity<Menu>(entity =>
{
entity.Property(e => e.MenuId).HasColumnName("MenuID");
entity.Property(e => e.AddTime).HasColumnType("datetime");
entity.Property(e => e.LinkUrl).HasMaxLength(200);
entity.Property(e => e.MenuName)
.IsRequired()
日向友好学校.HasMaxLength(10);
entity.Property(e => e.ModelId).HasColumnName("ModelID");
entity.HasOne(d => d.Model)
.WithMany(p => p.Menu)
.HasForeignKey(d => d.ModelId)
.OnDelete(DeleteBehavior.Restrict)
.HasConstraintName("FK__Menu__ModelID__25869641");
});
modelBuilder.Entity<Model>(entity =>
{
entity.Property(e => e.ModelId).HasColumnName("ModelID");
entity.Property(e => e.AddTime).HasColumnType("datetime");
entity.Property(e => e.ModelName)
.IsRequired()
.HasMaxLength(10);
});
}
}
View Code
三、使⽤Include 获取关联表数据实例
注 :使⽤Include ⽅式获取的数据为对应类型的对象,⽽不是动态类型Dynamic_xxxx
MenuModelContext _Context = new MenuModelContext();
List<Menu> list = _Context.Menus
.
Include(q => q.Model) //⼿动指定关联表查询,⼀对⼀
.ToList();
foreach (var item in list)
{
Console.WriteLine(item.MenuName);
Console.WriteLine(item.Model);
}
MenuModelContext _Context = new MenuModelContext(); List<Model> list = _Context.Models
.Include(q => q.Menus) //⼿动指定关联表查询,⼀对多
.ToList();
foreach (var item in list)
{
Console.WriteLine(item.ModelName);
Console.WriteLine(item.Menus.Count);
}
更多 :
Ef core的其他参考:

本文发布于:2024-09-22 17:27:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/137475.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:关联   查询   加载   数据   获取
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议