object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时...,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。...特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址hashcode...hashcode也只用于HashSet/HashMap/Hashtable类存储数据,所以会用于比较,需要重写 总结,自定义类要重写equals方法来进行等值比较,自定义类要重写compareTo方法来进行不同对象大小的比较...,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable类时进行比较
如果要进一步配置由约定创建的索引,则此操作非常有用。 索引唯一性 默认情况下,索引不唯一:允许多行具有与索引的列集相同的值。 ...您可以使用 "熟知 API" 设置在数据库中创建的索引的名称: protected override void OnModelCreating(ModelBuilder modelBuilder) {...您可以使用熟知的 API 来指定索引的筛选器,作为 SQL 表达式提供: protected override void OnModelCreating(ModelBuilder modelBuilder...若要重写此约定,可以提供 null 值。...但此外,仅访问 Title 和 PublishedOn 列的查询将不需要访问表,并且将更有效地运行: protected override void OnModelCreating(ModelBuilder
javaGuide里说到了为什么要重写hashcode的原因: 3)为什么重写 equals 时必须重写 hashCode 方法? 如果两个对象相等,则 hashcode 一定也是相同的。...因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖。 hashCode()的默认行为是对堆上的对象产生独特值。...后面自己看了别的博文,理解了下,我觉得一定要重写hashcode的主要原因是要保障equals方法的特性,即equals返回结果必须与其hashcode比较结果必须保持一致. 为什么要这样保障呢?...equals方法(可根据需求重写)比较。...2,重写equals()方法就重写hashCode()方法。 3,一般相等的对象都规定有相同的hashCode。 4,String类重写了equals和hashCode方法,比较的是值。
我们新建一个项目,在项目中重写 DbContext 上下文里的 OnModelCreating 方法,在这个方法中我们使用 HasQueryFilter 方法进行软删除。...p.IsDelete); base.OnModelCreating(modelBuilder); } } 上面这段代码大部分人看完一定觉得没有问题,但是我要告诉各位的是这段代码有一个很大的问题...方法中,通过注入的 entityTypeProvider 获取需要全局查询过滤的类型集合,并进行遍历,调用得到进行查询过滤的方法传入 modelBuilder 参数,从而实现多租户查询过滤。...}); } base.OnModelCreating(modelBuilder); } 三、总结 这篇文章这是简单的实现了多租户和软删除,队医业务场景更加复杂的项目,我们需要利用一些特殊方法来实现全局查询过滤器...上面所说的方法只是其中一种,不排除由更好的方法。
OnModelCreating方法 public class MyDbContext : DbContext { public MyDbContext() :...OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder...Core中 同样也是该类继承DbContext,但是需要分别重写OnConfiguring和OnModelCreating方法 public class MyDbContext:DbContext...(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //...具体实现: 在Controller中使用构造函数注入(不是属性注入) 1)、首先需要在UserSys.IService层中,写一个通用的接口,该接口中不需要定义任何的方法
Fluent API 来修改模型 为我们的模型增加标签 通过构建器来覆盖默认约定,我们需要重写 DbContext 的一个方法 OnModelCreating: protectedoverridevoid...OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //Map schemas...这是EF的默认约定,如果要修改关系表的名称,并修改对应的字段的名称,我们可以使用下面的代码来完成: modelBuilder.Entity() .HasMany(e => e.Orders...protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder...protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder
FluentAPI方式通过在OnModelCreating方法中添加代码逻辑来完成,也可以通过实现IEntityTypeConfiguration类来完成,方式灵活,更能更加强大。...在数据库中,数据表之间的关系可以分为一对一、一对多、多对多三种,在实体之间同样有这三种关系,但是EF Core仅支持一对一、一对多关系,如果要实现多对多关系,则需要通过关系实体进行关联。...对象,对应的数据库配置如下: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity...,显然无论在Blog或Tag中定义外键都不合适,此时就需要一张关系表来进行关联,这张表就是BlogTag表。...对应的关系配置如下: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity
自定义约定相对来说比Fluent API 要简单,只需一行代码即可解决。...我们只需要在 OnModelCreating 方法中加入如下代码即可: modelBuilder.Properties().Where(p => p.Name == "Id").Configure(p...,***自定义类约定***都必须在 OnModelCreating 方法中显式配置,例如我们要将模型中类型为DateTime的属性映射为datetime2,可进行如下配置: public class DateTime2Convention...,有可能会受到默认原定的影响,这时我们可以用到:*AddBefore 和 AddAfter 方法,例如:将我们前面创建的约定放在内置约定发现逐渐约定之前运行。...但是上述代码存在一个问题,如果匹配的不是字符串类型将会报错,因此我们将代码更新如下: protected override void OnModelCreating(DbModelBuilder modelBuilder
然而我们的客户大佬们 对这个又有要求..所以..没办法 只能自己扩展~ 当然也可以根据这个原理来做一些有意思的扩展~ 本文就以不支持的达梦数据库来举个栗子 ....所以,我们只需要针对CreateTable,AlterColumn,AddColumn,AlterTable 四个生成方法做重写就好了 这样,我们就可以通过在上下文中配置Fluent API就可以自动生成描述了...~ 我们在EF上下文的OnModelCreating添加代码如下: protected override void OnModelCreating(ModelBuilder modelBuilder)..., 且一旦表多起来,那么OnModelCreating 方法就会变的超长(虽然也可以写在实体类里面,但是就觉得很麻烦).. ?...~ 当然是可以的啦~ 我们修改OnModelCreating 中的代码如下: protected override void OnModelCreating(ModelBuilder modelBuilder
(ModelBuilder modelBuilder) { } } 在Startup的ConfigurationServices方法中添加EF CORE服务 public void ConfigureServices...还记得我们第一步中MyContext定义的OnModelCreating方法吗,Fluent Api就是在那里面使用的 增加以下代码至OnModelCreating方法。...在OnModelCreating方法中使用Fluent Api配置。 假如导航属性中存在对其他实体的引用,那么即便不把被引用实体配置为显式引用,被引用实体也可以隐式地映射到数据库中。 如以下代码所示。...Blog实体包含对Post实体的引用,而独立的AuditEntry则可以在OnModelCreating方法中进行配置。...方法,它通常跟在HasForeignKey和WithMany方法后,用以指定实体中的一个或多个属性作为备用键。
从这个想法出发,其实我们很自然地就可以想到 Context 中的 OnModelCreating 方法,在传统的 EF 6中,它也是作为实体模型属性映射的方法容器存在。...它的方法签名如下: protected internal virtual void OnModelCreating(ModelBuilder modelBuilder) { } 配置的方法容器找到了,读取实体信息也是水到渠成的一件事...在这一步以后,通过查看 modelBuilder 上的相应方法,我们找到了 FindEntityType 和 AddEntityType 方法。...所幸我们也可以直接在 OnModelCreating 方法中指定这一项规则。...); } } // 在 OnModelCreating 方法中加入以下代码 builder.ExecuteConfigurations("存放实体配置的程序集名称"); base.OnModelCreating
在项目开发的过程中我们往往需要将项目数据库中的表添加一个统一的前缀。我们为什么要添加表前缀呢?有的可能是公司规定,更多的原因是项目和业务的区分。 每个项目针对不同的需求或业务场景,追加相应的标识。...逐个配置 在Entity Framework Core中我们可以通过以下两种方式实现,逐个配置每个表的前缀的方式实现 Fluent API modelBuilder.Entity()...当然有更优雅的方式,我们可以在创建DbContext时进行一些额外的配置即可实现。...class MyContext : DbContext { public DbSet Blogs { get; set; } protected override void OnModelCreating...(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 从当前程序集加载所有IEntityTypeConfiguration
我们都知道Entity Framework 中不能同时更新多条记录,但是一个老外写的扩展库可以实现此功能EntityFramework.Extended,但是如何是mysql数据库要怎么实现呢 首先实现一个自定义类继承于...get; set; } public DbSet Posts { get; set; } protected override void OnModelCreating...(DbModelBuilder modelBuilder) { //如果没有下面这句,会采用mssql的默认schema=> dbo;所有想要使用...或者再实体映射加上mysql数据库的schema;例如实体类DepartPerson=>特性[Table("DepartPerson", Schema= "test")] modelBuilder.HasDefaultSchema...(""); base.OnModelCreating(modelBuilder); } } 具体使用方法: TestContext testContext
: 设置属性需要在数据库操作上下文的 protected override void OnModelCreating(DbModelBuilder modelBuilder)...{ base.OnModelCreating(modelBuilder); } 1.HasKey - KeyAttribute:配置此实体类型的主键属性...所以以下API的映射推荐使用FluentAPI的方式来设置映射 6.ToTable - TableAttribute:配置此实体类型映射到的表名 modelBuilder.Entity()...如果未在对象模型中公开外键属性,则使用Map方法 modelBuilder.Entity().HasRequired(order => order.customer).WithMany()...如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。
仓储 在本节,我们要升级位置服务让它使用 Postgres 为了完成这一过程,需要创建一个新的仓储实现,以封装 PostgreSQL 的客户端通信 回顾一下位置仓库的接口 public interface...数据库上下文的使用方式是创建与特定模型相关的类型,并从数据库上下文继承 由于与位置数据打交道,所以要创建一个 LocationDbContext 类 using Microsoft.EntityFrameworkCore...(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasPostgresExtension...(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.HasPostgresExtension...AddEntityFrameworkNpgsql 以及 AddDbContext 两个方法的调用 对真实仓储进行集成测试 我们想要利用自动的构建流水线,每次运行构建时都启动一个新的、空白的 Postgres
EF 中的使用演示 我们首次创建一个未使用强类型 ID 的 Demo,之后用不同方法实现强类型 ID 进行比较。项目都选择 .NET 7,数据库这里使用的是 MySql 。...property, or ignore it using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating...protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(...使用 LessCode.EFCore.StronglyTypedId 简化 通过上一小节我们看到,虽然支持了强类型 ID ,但是要实现起来需要自行配置的东西还是非常多得,用的越多,额外代码的工作量也随之增长...protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder
,它能够将程序中的对象自动持久化到关系型数据库中,并能够将数据库中的数据信息自动映射到编程语言中的对象 EF Core 的另一个特点是支持 LINQ,通过 LINQ,我们能够像操作 .NET 集合对象中的数据一样来操作数据库中存储的数据...,通常建议使用“代码优先”的方法,如果使用“数据库优先”,可以通过以下命令生成数据库对应代码 Scaffold-DbContext 代码优先,创建实体类 namespace Library.API.Entities...dotnet-ef 接着将迁移应用到数据库中 dotnet ef database update 命令执行成功之后,数据库就创建成功了 添加测试数据,在 LibraryDbContext 中重载 OnModelCreating...方法 protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder...如果要删除测试数据,可以注释添加测试数据的代码,并添加一个迁移即可 如果添加数据是最近的一次迁移操作,并且还未执行数据库更新命令,可以直接通过以下命令删除该迁移 dotnet ef migrations
Posts { get; set; } 5 6 public int TenantId {get; set; } 7 8 protected override void OnModelCreating...(ModelBuilder modelBuilder) 9 { 10 modelBuilder.Entity().HasQueryFilter( 11...模型级过滤器将使用正确的上下文实例中的值,即执行查询的那个。 使用 IgnoreQueryFilters() 方法在一次查询中禁用过滤器。... 在使用C#6.0的特性构建SQL语句并使用FromSql和ExecuteSqlCommand方法执行SQL语句时,会自动加入使用参数化查询,防止SQL注入。...一旦注册了方法,您就可以在查询的任何地方使用它。 要注意的几件事: 按照惯例,在生成SQL时,该方法的名称用作函数的名称(在本例中是用户定义的函数),但可以在方法注册期间重写名称和schema。
### 对EF Core进行扩展使支持批量操作/复杂查询 EF Core的问题一言难尽,然后有了各种插件,批量插入扩展,批量更新扩展,查询扩展。。。然后一个项目引入一堆扩展 解决此问题 1....```c# protected override void OnModelCreating(ModelBuilder modelBuilder) { var...e.Property(b => b.Name).HasMaxLength(50) ; e.ConfigEntityTypeBuilder(); base.OnModelCreating...(modelBuilder); } ``` 获取DbContext的IDbConnection dbConnection 通过扩展方法**GetDBExtend**获取IAbsDBExtend...· hubroxxl/CRL - 码云 - 开源中国 (gitee.com)](https://gitee.com/hubroxxl/crl/tree/master/Data/EFTest) 高级的查询方法见源码示例
领取专属 10元无门槛券
手把手带您无忧上云