office2007破解版下载-msvcp110

 net core 2 0
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

Menus{get;set;}

}

ViewCode

上下⽂类

publicclassMenuModelContext:DbContext

{

publicvirtualDbSet

Menus{get;set;}

publicvirtualDbSetModels{get;set;}

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

Menu{get;set;}

}

ViewCode

上下⽂类:

publicpartialclassMenuModelContext:DbContext

{

publicvirtualDbSet

Menu{get;set;}

publicvirtualDbSetModel{get;set;}

protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptionsBuilder)

{

Server(@"Server=(localdb)mssqllocaldb;database=MenuModel;Trusted_Connection=True;");

}

protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)

{

(entity=>

{

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");

});

(entity=>

{

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

list=_

.Include(q=>)//⼿动指定关联表查询,⼀对⼀

.ToList();

foreach(variteminlist)

{

ine(me);

ine();

}

MenuModelContext_Context=newMenuModelContext();

Listlist=_

.Include(q=>)//⼿动指定关联表查询,⼀对多

.ToList();

foreach(variteminlist)

{

ine(ame);

ine();

}

更多:

Efcore的其他参考:

更多推荐

net core 2 0