office2007破解版下载-msvcp110
![net core 2 0](/uploads/image/0475.jpg)
2023年4月4日发(作者:stereoscopic player)
.NetCore中EFCore的使⽤整理(⼆)-关联表查询
EF常⽤处理关联加载的⽅式有3中:延迟加载(LazyLoading)、贪婪加载(EagerLoading)以及显⽰加载。
⼀、EFCore1.1
1.当前的版本,还不⽀持延迟加载(LazyLoading),不将来是否⽀持
2.⽬前⽀持贪婪加载:使⽤Include加载关联表的数据,这种⽅式使⽤⼀条Join的Sql语句进⾏查询。
3.贪婪加载的优势在于仅执⾏1次SQL查询即返回所需要的结果。但使⽤JOIN查询在数据库记录条数较多时,多条简单的SQL查询往往⽐
⼀条复杂的JOIN查询效率要好。
Include语句可以在⼀次查询中使⽤多次:
ries
.Include(c=>ts)
.Include(c=>);
4.限制加载的⽅式暂时忽略使⽤。
⼆、EFCore中主外键设置
1.使⽤数据注释,DataAnnotations模式,这种⽅式适合CodeFirst或者说⼿写实体类和⾃定义主外键关联。
Menu表
[Table("Menu")]
publicpartialclassMenu
{
[Key]
publicintMenuID{get;set;}
publicstringMenuName{get;set;}
publicstringLinkUrl{get;set;}
publicDateTimeAddTime{get;set;}
publicintSortNumber{get;set;}
publicintModelID{get;set;}
[ForeignKey("ModelID")]
publicvirtualModelModel{get;set;}
}
ViewCode
Model表
[Table("Model")]
publicpartialclassModel
{
publicModel()
{
=newHashSet
}
[Key]
publicintModelID{get;set;}
publicstringModelName{get;set;}
publicintSortNumber{get;set;}
publicDateTimeAddTime{get;set;}
publicvirtualICollection
}
ViewCode
上下⽂类
publicclassMenuModelContext:DbContext
{
publicvirtualDbSet
publicvirtualDbSet
protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptionsBuilder)
{
Server(@"Server=(localdb)mssqllocaldb;database=MenuModel;Trusted_Connection=True;");
}
}
ViewCode
2.使⽤FluentAPI模式,这种⽅式,是⾃动DBFirst⾃动⽣成实体层的默认⽅式
Menu表
publicpartialclassMenu
{
publicintMenuId{get;set;}
publicstringMenuName{get;set;}
publicstringLinkUrl{get;set;}
publicDateTimeAddTime{get;set;}
publicintSortNumber{get;set;}
publicintModelId{get;set;}
publicvirtualModelModel{get;set;}
}
ViewCode
Model表
publicpartialclassModel
{
publicModel()
{
Menu=newHashSet
}
publicintModelId{get;set;}
publicstringModelName{get;set;}
publicintSortNumber{get;set;}
publicDateTimeAddTime{get;set;}
publicvirtualICollection
}
ViewCode
上下⽂类:
publicpartialclassMenuModelContext:DbContext
{
publicvirtualDbSet
publicvirtualDbSet
protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptionsBuilder)
{
Server(@"Server=(localdb)mssqllocaldb;database=MenuModel;Trusted_Connection=True;");
}
protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)
{
{
ty(e=>).HasColumnName("MenuID");
ty(e=>e).HasColumnType("datetime");
ty(e=>l).HasMaxLength(200);
ty(e=>me)
.IsRequired()
.HasMaxLength(10);
ty(e=>d).HasColumnName("ModelID");
(d=>)
.WithMany(p=>)
.HasForeignKey(d=>d)
.OnDelete(ct)
.HasConstraintName("FK__Menu__ModelID__25869641");
});
{
ty(e=>d).HasColumnName("ModelID");
ty(e=>e).HasColumnType("datetime");
ty(e=>ame)
.IsRequired()
.HasMaxLength(10);
});
}
}
ViewCode
三、使⽤Include获取关联表数据实例
注:使⽤Include⽅式获取的数据为对应类型的对象,⽽不是动态类型Dynamic_xxxx
MenuModelContext_Context=newMenuModelContext();
List
.Include(q=>)//⼿动指定关联表查询,⼀对⼀
.ToList();
foreach(variteminlist)
{
ine(me);
ine();
}
MenuModelContext_Context=newMenuModelContext();
List
.Include(q=>)//⼿动指定关联表查询,⼀对多
.ToList();
foreach(variteminlist)
{
ine(ame);
ine();
}
更多:
Efcore的其他参考:
更多推荐
net core 2 0
发布评论