首页 > TAG信息列表 > EfCore
C#_EFCore学习
1、批量增加,删除,更新 包:Zack.EFCore.Batch //增加 ctx.BulkInsert(books) //删除 await ctx.DeleteRangeAsync<Book>(b=>b.Price>n||b.AuthorName=="Diff"); //更新Set(b=>b.Key,b.value) await ctx.BatchUpdate<Book>() .Set(b=>b.Price,b.Price+EFCore 悲观锁 和 乐观锁
乐观并发控制 并发令牌Owner 经典例子就是两个人同时执行了抢购业务 Update是同时执行的,这就导致后面的会覆盖前面的,导致业务出现问题! 原理就是在 update的表中 Owner = 旧值 1、我们需要 只需要让EFCore在 code first下配置实体 设置一下Owner 字段为 IsConcurrencyToken() 设置EFCore先DBFirst,再CodeFirst(针对老项目迁移)
参照文章: CodeFirst命令介绍:Scaffold-DbContext 命令使用 - 跟着阿笨一起玩.NET - 博客园 (cnblogs.com) 整体流程介绍:NetCore 中 EFcore的DbFirst和CodeFirst混合 使用注意 (shuzhiduo.com) 对于老项目往新项目迁移: 1、因为项目已经运转一段时间,数据库里已经存在大量的业务数据,所轻量级ORM LiteSql
最近几天,又在NuGet上发了一个版本,主要是把旧接口名称FindXXXBySql修改为QueryXXX,因为我发现Dapper及其扩展,以及其它写SQL的ORM,都是QueryXXX,既然这样,接口名称就修改成和大家的习惯一致。 没人用 下载量惨不忍睹,看来,不会有什么人用了。简单分析一下原因,1.大家不再喜欢写SQL;2.不会宣EF的全局过滤器 HasQueryFilter 从EFCore 2.0才有
全局过滤 多用于类似 系统软删除、多租户的情况: 可以参看文章: EntityFramework Core 2.0全局过滤(HasQueryFilter) - Jeffcky - 博客园 (cnblogs.com) EF Core HasQueryFilter 的小坑 - dudu - 博客园 (cnblogs.com) Part3-37:EF Core全局查询筛选器_哔哩哔哩_bilibili 如果某次查efcore在Saas系统下多租户零脚本分表分库读写分离解决方案
efcore在Saas系统下多租户零脚本分表分库读写分离解决方案 ## 介绍 本文ShardinfCore版本x.6.0.20+ 本期主角: - [`ShardingCore`](https://github.com/dotnetcore/sharding-core) 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案,具有零依赖、零学习成本、零业务代码EFCore的导航属性
不清楚现在是否还使用导航属性,这里先记录一下其用法。 导航属性就是类似外键的定义。 分为:一对一导航,一对多(主子表关系),多对多关系(需要中间表)。 HasOne<T>,WithMany<T>,ForeinKey。 还有一种是自引用,用于建立上下级的树形结构。EFCore里的数据校验特性
[Required] [MinLength(3,ErrorMessage = "名称长度至少为3")] [Display(Name = "名称")] public string Name { get; set; } [Required] 表示必需的,[MinLength(3,ErrorMessage = “名称长度至少为3”)],这里表示名称长度至少为3个字符[Display(Name = “名称”)]EFCore高级Saas系统下单DbContext如何支持不同数据库的迁移
EFCore高级Saas系统下单DbContext如何支持不同数据库的迁移 前言 随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是基于数据库的多租户也是可以用的,但是也存在缺点,缺点就是没有办法支持不同数据库,migratio.NetCore EFCore 多线程生命周期管理
1、多线程下EFCore的DbContext实例处理 DbContext生命周期默认注入是Scope,每一次请求时创建一个实例,在当前请求的上下文中共用,当请求结束后,释放生命周期,释放数据库链接。若开启多线程,在不同的线程中使用同一个DbContext上下文,则报错如下:System.InvalidOperationExnet core6 应用EFCore
1、nuget引用 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.SqlServer.Design Microsoft.EntityFrameworkCore.Tools 2、执行脚本 打开VS-》工具-》nuget包管理器-》程序包管理器控制台-》执行脚本 Scaffold-DbCEFCore 仓储模式的实现
仓储模式的EF实现 Repository Pattern, 解耦应用层与ORM层,提供对ORM层统一的API的访问。再配合DI,可以很方便的实现数据库的访问。下面介绍一下针对EF 的仓储模式的实现,以及DI的注册。 仓储模式代码 public class Repository<TEntity> : IRepository<TEntity> where TEntity : claEFCore中的主键
自增主键1、EF Core支持多种主键生成策略:自动增长:Guid;Hi/Lo算法等2、自动增长优点:简单缺点:数据库迁移以及分布式系统中比较麻烦;并发性能差。long、int等类型主键,默认是自增。因为是数据库生成的值,所以SaveChanges后UI自欧东把主键的值更新到Id属性。3、自增字段的代码中不能为Iefcore注解
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; namespace HySamllProjects.Models { [Table("ZHSKSB_YS1000")EFCore中数据表的两种配置方式
1、Data Annotation把配置以特性(Annotation)的形式标注在实体类中[Table("T_Dogs")]public class Dog{ public int Id { get; set; } [Required] [MaxLength(22)] public string Name { get; set; }}优点:简单缺点:耦合 2、FluentAPIbuilder.ToTable("T_Books");把配置EFCore的一些约定配置
1、表名采用DbContext中的对应的DbSet的属性名2、数据表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容的类型3、数据表列的可空性取决于对应实体类属性的可空性4、名字为Id的属性为主键,如果主键为short、int或者long类型,则默认采用自增字段,如果主键为G.NET经销商实战(一)——项目搭建与EFCore的使用
一.项目框架搭建 1.创建四个项目,分别是DealerPlatform.Core,DealerPlatform.Domain,DealerPlatform.Service,DealerPlatform.Web 除了web都是类库,web是api项目 2.在DealerPlatform.Core项目中,新建一个Repository文件夹,分别新增Repository类与IRepository接口 3.在Core项目中引入包: Mwebapi+efcore+mysql+iis
1.创建WebApiDemo 2.创建Person类 public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } 3.添加context上下文 public class ModelContext: DbContext {<一>EFCORE
Entity Framework (EF)Core是Entity Framework 的一个轻量级和可扩展的版本。 EF Core是一个ORM(对象关系映射),它使.NET 开发人员可以直接使用.NET对象来操作数据库,消除了大部分的数据访问代码,开发者通常只需要编写对象即可。支持多种数据库引擎。 一、上下文 using Microsoft.EntiEFCore乐观并发控制:并发令牌
乐观并发控制的原理Update T_Table set Owner = 新值 where Id = 1 and Owner = 旧值当Update的时候,如果数据库中的Owner值已经被其他操作者更新为了其他值了,那么where语句的值就会为false,因此这个Update语句影响了行数就是0,EFCore就知道"发生并发冲突"了。因此SaveChanges()方法EFCore之CodeFirst更新数据库
EFCore之CodeFirst更新数据库 前言 今天小区由封控区变为管控区了,但是疫情还很严重,几天又有2W阳性,目前为止上海都有50多W阳性病例了,好了,不多少说了,言归正传,在上节“EFCore之CodeFirst模式”了解了CodeFirst,这节主要讲述CodeFirst更新数据库,设置主键、外键和字符串长度。 环境 l WEFCore之CodeFirst模式
EFCore之CodeFirst模式 前言 EF Core有两种数据库设计模式,DBfirst 数据库优先、Codefirst 代码优先。 我们一般设计是先添加数据库表信息,然后将数据库的信息更新到项目实体中。这种做法就是我们的DBfirst模式。 使用codefirst模式,我们就可以先创建表实体,添加字段限制,执行两条命生EFCore 的 DbFirst 模式
1 前言 EF6 时代,可以通过界面操作,添加数据库实体。 EF Core 需要通过 CLI 来进行该操作,具体请参考EF Core官方文档:反向工程。 2 前置条件 PMC 工具(仅限 Visual Studio)或 CLI 工具。 核心 NuGet 包:Microsoft.EntityFrameworkCore.Design 还需要为要进行反向工程的数据库架构EFCore优化之AsNoTracking
快照更改跟踪1、如果通过DbContext查询出来的对象只是用来展示不会发生状态改变,则可以使用AsNoTracking()来"禁用跟踪" 2、分别加AsNoTracking()和不加,分别查看一个对象修改后的EntityEntry信息 3、如果查询出来的对象不会被修改、删除等,那么查询是可以AsNoTracking(),就能降低内EFCore启用数据库连接池
本文环境为.Net5 + ASP.Net Core Web API + EFCore 5.0.12 + MySQL 5,介绍了如何使用EFCore开启数据库连接池。 在实现了自己的DbContext之后,需要在Startup.cs的ConfigureServices方法中注册DbContext。在ASP.Net Core Web API中,每次请求对应的Controller都会创建一次DbContext对象