EF Code 多对多表关系建设和Linq 知识点

自引用组织结构树,比如部门、组织

除了根节点,其他节点都有一个父节点,也包含多个子节点,那么在定义表结构时,既要申明父表的关系,也要申明子表的关系

EF Code 多对多

builder.ToTable("T_Student");

builder.HasMany(x=>x.Teachers).WithMany(x=>x.Students).UsingEntity(j=>j.Totable("T_Students_Teachers"));

----------------------------------------------------------------------------------------------------------------------------

Linq使用以下两个对象造成的差异如下:

  • IQueryable  将Linq转化为sql 由服务器执行后返回数据 通常查询速度更快
  • IEnumaerble  在内存中处理Linq处理

IQueryable 具有延迟特征,只有到遍历、ToList等环节才会去数据库执行Sql语句。

EF Core  中尽量使用异步方法,异步减少耗时操作占用线程资源。

string name="';

int age=10;

EFCore 中执行原生Sql:db.Tables.ExecuteSqlInterpolateAsync("insert into student (name,age) values({name},{age})")

EFCore 将name、age传参做处理,避免了Sql注入的风险。

-----------------------------------------------------------------------------------------------------------------------------

EFCore 全局查询筛选器:自动在Sql后加入条件

场景:多租户、软删除

在数据配置文件中使用HasQueryFilter()过滤数据

如果查询时需要显示特殊的信息,可以使用db.IgnoreQueryFilters().Where()查询信息

-----------------------------------------------------------------------------------------------------------------

EFCore底层不具备批量修改、删除、插入数据

可以使用杨中科老师开发的开源插件

你可能感兴趣的:(linq,c#)