EFCore
Mudrock__
这个作者很懒,什么都没留下…
展开
-
EFCore_循环获取多级导航属性
EFCore_循环获取多级导航属性。原创 2024-07-27 13:07:12 · 159 阅读 · 0 评论 -
EFCore_悲观锁与乐观锁(MySQL)
对并发可能导致的资源抢占问题持乐观态度,并不对资源实际上锁,而是在对资源进行更新时,对表中的并发令牌(单字段并发控制)或行版本字段(多字段并发控制)进行一致性检测(是否与开始读取该资源时一致),若一致则认为此时不存在资源抢占问题,进而更新数据(更新数据时会一同更新行版本字段)对字段执行更新前,会检测字段的当前值与读取数据时的值是否相等,若相等则认为不存在并发冲突,可以进行更新,否则认为存在并发冲突,抛出异常(DbUpdateConcurrencyException)悲观锁实际上是通过MySQL的。原创 2024-07-02 18:10:11 · 643 阅读 · 0 评论 -
EFCore_跟踪机制
然而实际上有时并不需要EFCore进行跟踪,例如仅查询数据时。此时跟踪行为就是纯粹的浪费内存。实例只要和EFCore产生关系,就会被EFCore跟踪(监视实例数据是否发生变化)原创 2024-07-02 15:14:09 · 216 阅读 · 0 评论 -
EFCore_查询过滤器(默认条件)
此后,所有查询命令均会默认添加过滤器。此时,该查询命令会忽略过滤器。原创 2024-07-02 14:28:03 · 218 阅读 · 0 评论 -
EFCore_原生SQL语句
该函数虽然参数类型为FormattableString,但实际上还是执行的ExecuteSqlRaw,只是参数从FormattableString参数中获取,所以还是。,所以没有异步版本(IQueryable为可执行的查询,实际上对应的SQL并未生成、执行,所以无法异步),因其根据FormattableString生成参数化SQL,而不是拼接SQL。以上函数均有异步版本,返回值类型为int,含义为受影响数据行数。,因其根据string生成拼接SQL。...... 以此类推。原创 2024-07-01 17:42:35 · 304 阅读 · 0 评论 -
EFCore_查询延迟执行机制及基于此的动态SQL拼接
若需要将数据一次性加载至内存,可以通过执行ToList()、ToArray()等方法,但通常不会出现该情况。的,通常是终结方法(遍历、ToList()、ToArray()、Max()、Min()、Count()等)。通过上述可知,IQueryable<>是"可执行的查询",但实际上并未生效,所以可以对其。对实体(DbSet)执行条件查询后,对应的SQL未必生成、执行,通常在执行了。,执行终结方法时,翻译的SQL语句会囊括所有查询条件。SQL才会真正地生成并执行。简而言之,若返回值类型。原创 2024-07-01 16:30:55 · 169 阅读 · 0 评论 -
EFCore_客户端评估与服务端评估
对实体(DbSet)执行Linq默认返回IQueryable,换言之默认执行的Linq是IQueryable类型下的Linq,该Linq采用的是服务端评估。若想进行客户端评估,可将实体转换为IEnumerable,此时执行的是IEnumerable类型下的Linq,该Linq采用的是客户端评估。先将代码翻译为SQL语句,再执行SQL语句对数据进行筛选,数据的筛选工作在。先将表的所有数据读取至内存,再在内存中对数据进行筛选,数据的筛选工作在。原创 2024-07-01 15:50:10 · 234 阅读 · 0 评论 -
EFCore_一对一、一对多、多对多
关系配置在任意一端均可,实体对应的表中不存储外键(无需,也无法调用HasForeignKey()),外键存储在额外生成的中间表中,可通过UsingEntity("xxx")或UsingEntity(t=>t.ToTable("xxx"))来指定中间表名。以"教师"实体为例,其对应表为"Teacher"。答:通常单向导航属性出现在一对一 / 一对多的情况下(多对多的情况下外键储存在中间表),所以将关系配置在单向导航属性所在的实体类的配置类中,并将WithOne() / WithMany()置空即可。原创 2024-05-31 15:49:26 · 500 阅读 · 0 评论 -
EFCore_增删改查
3-ExecuteXxx()函数执行批量操作时,是实际上的批量操作。此外,区别于XxxRange(),无需将数据加载至内存(无查询操作,仅生成一条SQL)2-XxxRange()函数实际上是单个操作的循环,并不是真正意义上的批量操作。函数将实例更新至DB(实例可以是通过查询获得的,也可以是新建的)实现(第一个参数为被修改的表字段,第二个参数为修改值)方式:先查询(通过对DbSet执行Linq),再修改。EFCore7.0+时,删除(单个或批量)可通过。EFCore7.0+时,修改(单个或批量)可通过。原创 2024-05-20 15:54:37 · 461 阅读 · 0 评论 -
EFCore_获取C#代码的SQL命令
1. 添加依赖:Microsoft.Extensions.Logging.Console(此处以输出至控制台为例)在...DbContext.cs中的OnConfiguring()函数中添加对SimpleLog的应用。3. 在...DbContext.cs中的OnConfiguring()函数中添加对日志工厂的应用。注:message即为日志信息,其包括但不限于SQL信息。2. 在...DbContext.cs中创建日志工厂。注:该方式仅可获取查询语句的SQL。原创 2024-05-20 15:41:47 · 310 阅读 · 0 评论 -
EFCore_创建项目
配置类实现IEntityTypeConfiguration<>接口,可在其中对表进行详细设置,常用可设置项详见代码注释(若不创建实体类配置类,则会采用默认配置,详见本节文末)添加该依赖时可不添加Microsoft.EntityFrameworkCore,该依赖会捆绑添加。Oracle官方也提供MySQL依赖,但是跟新速度极慢。add-migration xxx(此次migration的代号)3.默认将"Id"或"实体类名+Id"属性对应的表字段设置为主键。1.默认将实体类属性名作为表字段名。原创 2024-05-14 16:56:21 · 362 阅读 · 0 评论 -
EFCore_Migration常用命令
script-migration 代号X 代号Y 生成从代号X版本至代号Y版本的SQL代码(代码未执行)add-migration 代号(此次Migration的代号) 添加迁移。remove-migration 移除最近的迁移文件(需要该文件未被执行)update-database 代号 迁移至代号版本(迁移文件不变)script-migration 生成迁移的SQL代码(代码未执行)update-database 执行最新迁移文件的Up函数。原创 2024-05-14 16:54:10 · 387 阅读 · 0 评论