还记得我们第一步中MyContext定义的OnModelCreating方法吗,Fluent Api就是在那里面使用的 增加以下代码至OnModelCreating方法。...包含和排除实体类型 将实体在Context中映射到数据库有多种方式: 使用DbSet定义属性。 在OnModelCreating方法中使用Fluent Api配置。...当开发者需要进行自定义修改名称时( 比如每种关系型数据库的命名规则不一样,虽然笔者一直喜欢使用帕斯卡命名以保持和项目代码结构中的统一),可以使用以下的方式。...计算列 计算列指的是列的数据由数据库计算生成,在EF CORE层面,我们只需要定义计算规则即可。目前EF CORE 1.1 版本中,暂不支持使用Data Annotations方式定义。...默认值 默认值与计算列定义十分相似,只是计算列无法由用户手动输入。而默认值更多指的是当用户不手动输入时,使用默认值进行数据库相应列的填充。
上下文池可以通过重复使用上下文实例,而不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...{ options.UseMySql(Configuration.GetConnectionString("LighterDbContext")); }); AddDbContextPool使用时...避免在维护状态的应用程序中使用上下文池。 例如,不应在请求之间共享的上下文中的私有字段。 在将上下文实例添加到池中之前,EF Core 仅重置它知道的状态。...ProjectController //project.Id = Guid.NewGuid().ToString(); 新增一条数据,返回 Id 是自动生成的 028.jpg 通过数据批注方式添加创建时间,修改时间默认值...migrations add ChangeLastUpdateByToString dotnet ef database update 启动程序,新增一条数据,可以看到创建时间,修改时间默认值 029
上下文池可以通过重复使用上下文实例,而不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...{ options.UseMySql(Configuration.GetConnectionString("LighterDbContext")); }); AddDbContextPool使用时...避免在维护状态的应用程序中使用上下文池。例如,不应在请求之间共享的上下文中的私有字段。在将上下文实例添加到池中之前,EF Core 仅重置它知道的状态。...通过数据批注方式添加创建时间,修改时间默认值 Entity /// /// 创建时间 /// [DatabaseGenerated(DatabaseGeneratedOption.Identity...migrations add ChangeLastUpdateByToString dotnet ef database update 启动程序,新增一条数据,可以看到创建时间,修改时间默认值 ?
数据库迁移 使用dotnet ef命令迁移: dotnet ef migrations add AppDbContext_Initial dotnet ef database update 执行完成后已经生成了...identity相关表: 修改主键类型/表名 identity用户,角色表的主键默认类型是string,默认值是Guid.NewGuid().ToString(),数据量不大时无所谓,否则可能存在性能问题...DbContextOptions options) : base(options) { } protected override void OnModelCreating...(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity使用identity完成用户注册登录,以及获取jwt token。
使用EF Core的第一步是创建数据模型,模型建的好,下班走的早。EF Core本身已经设置了一系列约定来帮我们快速的创建模型,例如表名、主键字段等,毕竟约定大于配置嘛。...如果你想改变默认值,很简单,EF Core提供了Fluent API或Data Annotations两种方式允许我们定制数据模型。...,而在EF Core中模型中为该实体类型定义的属性,这些类型只能通过变更跟踪器进行维护。...(b => EF.Property(b, "LastUpdated")); 索引 索引是用来提高查询效率的,在EF Core中,索引的定义仅支持FluentAPI方式。...Core支持实体具有有参的构造函数,默认情况下,EF Core使用无参构造函数来实例化实体对象,如果发现实体类型具有有参的构造函数,则优先使用有参的构造函数。
如果在 EF OnModelCreating 中配置了实体外键映射,也就是 SQL Server 中的 ForeignKey,那么我们在添加实体的时候,主实体的主键值会自动映射到子实体的外键值,并且这个操作在一个...就是实体更改了,需要进行 EF 迁移,如果你进行 EF 迁移的话,会发现,虽然我们没有在 OnModelCreating 中进行 ClassId 外键映射配置,但 EF 也会自动映射 ForeignKey...官方MSDN对于datetime2的说明:定义结合了 24 小时制时间的日期。...在c#中,如果实体类的属性没有赋值,一般都会取默认值,比如int类型的默认值为0,string类型默认值为null, 那DateTime的默认值呢?...因此我们在界面操作的都是DTO对象类型了,我们在定义的时候,为了避免更多的改动,依旧使用***Info这样的类名称作为DTO对象的名称,***代表表名对象。
本文详细介绍了Entity Framework 5(EF5)在C#中的使用方法,包括EF5的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用,并通过实例讲解了如何在项目中集成和使用EF5。...作为微软提供的ORM(对象关系映射)框架,EF5在简化数据库操作、提高开发效率方面发挥了重要作用。本文还将深入探讨EF5的核心原理,通过内部代码展示其工作机制。...其主要工作流程如下:数据模型定义:开发者通过定义实体类来描述数据库结构。数据库上下文管理:EF5提供了DbContext类,用于管理数据库连接和操作。...DbContext是EF的核心类,用于与数据库进行交互。查询与操作:EF5通过LINQ(Language Integrated Query)执行查询,并自动将结果映射到对象模型中。...OnModelCreating方法用于配置实体与数据库表之间的映射关系。2. 查询数据EF5使用LINQ进行数据查询,查询结果自动映射到对象模型中。
导航属性 导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年的SqlSugar重构已经拥有了一套 非常成熟的导航属性体系...,本文不是重点讲SqlSugar而是重点讲导航属性的作用,让更多写Sql人还未使用ORM的人了解到ORM的作用。...CORE查询 var Persons= dbContext.Person //需要定义DbSet才能点出来 .Where(it=>it.Files.Any(y=>y.ChildFiles.Any(s=...原码下载: https://github.com/DotNetNext/SqlSugar 总结: .NET中无论是EF CORE还是SQLSUGAR 使用了导航属性都不再需要费心写繁琐的SQL语句,只需简单地调用导航属性...让我们一起追随这份感动,选择使用导航属性,让编程的旅途更加愉悦,让代码的世界充满美好与便捷!
约定,类似于接口,是一个规范和规则,使用Code First 定义约定来配置模型和规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。...我们定义完模型,还需要让EF上下文你知道应该映射那些模型,此时我们需要通过 DbSet 属性来暴露模型的。...同样,也可以在模型中定义这样的关系。EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性和外键属性结合在一起使用。...当EF提供的默认约定都不符合我们要求的时候,我们可以使用自定义约定。...,在模型创建之后用于操作对模型的存储,***自定义类约定***都必须在 OnModelCreating 方法中显式配置,例如我们要将模型中类型为DateTime的属性映射为datetime2,可进行如下配置
从这个想法出发,其实我们很自然地就可以想到 Context 中的 OnModelCreating 方法,在传统的 EF 6中,它也是作为实体模型属性映射的方法容器存在。...如果大家看过笔者之前的那篇《EntityFramework Core 学习扫盲》,就会知道 Fluent Api 的使用都是在这个方法中的。...假如目标数据库是类似于 PostgreSql 这种,数据库的表名和列名都得定义成小写字母,否则在 sql 时将不得不使用双引定义,十分的麻烦。...EF Core 中,我们已经看不到它的身影了,残念ですね。...笔者在下面也给出另一种接口+反射方式的实现(第二个参考链接中的代码并不能直接使用)。
您可以使用 "熟知 API" 按如下方式为单个列指定索引: protected override void OnModelCreating(ModelBuilder modelBuilder) {...EF Core 每个不同的属性集仅支持一个索引。 如果使用 "熟知 API" 来配置已定义索引的属性集的索引(按照约定或以前的配置),则会更改该索引的定义。 ...您可以使用 "熟知 API" 设置在数据库中创建的索引的名称: protected override void OnModelCreating(ModelBuilder modelBuilder) {...您可以使用熟知的 API 来指定索引的筛选器,作为 SQL 表达式提供: protected override void OnModelCreating(ModelBuilder modelBuilder...SQL Server 提供程序 EF 时,将为唯一索引中包含的所有可以为 null 的列添加 'IS NOT NULL' 筛选器。
context 必须满足下面的要求: 派生自 System.Data.Entity.DbContext 对于你希望使用的每一个实体集定义一个属性 每一个属性的类型是 System.Data.Entity.DbSet...当 EF 访问实体的子实体的时候是如何工作的呢?你的集合是 POCO 的集合,所以,在访问的时候没有事件发生,EF 通过从你定义的实体派生一个动态的对象,然后覆盖你的子实体集合访问属性来实现。...为了告诉 EF 在实体中有一个属性表示并发标识,你可以通过标签 [ConcurrencyCheck] 来标识这个属性,或者使用模型构建器。我认为并发标识定义了业务规则,应该是模型的一部分。...这里我将讨论 TPT 和 TPH,EF 的好处是可以混合使用这些方式。...举例来说,我们可以不在DbContext中定义,而获得我们需要的实体集: protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder
,EF自动生成中间表,不需要新增实体来表示. (5)、表名默认复数化 2、类型发现约定(Type Discovery) 使用EF开发,往往是以定义一些模型类开始,定义完这些模型类之后,需要让DbContext...就可以使用 context(数据库上下文),使用这些预先暴露的DbSet类型,具体的代码如下: public class EFStudyDbContext:DbContext {...(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); }...数据库连接约定(Connection String Conventions in Code First) 二、移除约定 EF提供了移除默认约定的方法,通过该方法我们可以移除所有定义在System.Data.Entity.ModelConfiguration.Conventions...modelBuilder.Conventions.Remove(); } } 三、自定义约定 EF 自定义约定
接下来我们先来看一个例子,我们假定多个租户使用同一个数据库,同一个Schema,区分租户是根据表中的 tId 区分。...我们新建一个项目,在项目中重写 DbContext 上下文里的 OnModelCreating 方法,在这个方法中我们使用 HasQueryFilter 方法进行软删除。...class TenantProvider : ITenantProvider { public int GetTId() { return 1; } } 最后我们定义查询...; public DepartmentDb(EFContext _ef) { ef = _ef; } public IQueryable<Department...= tenantProvider.GetTId(); this.entityTypeProvider = entityTypeProvider; } } 第二步 在上下文中定义全局查询过滤的泛型方法
UserSys.Common:一些通用的组件封装到该类库中 UserSys.Web:Asp.Net MVC 2、Web层采用Asp.Net MVC 3、数据库访问通过EF...string PasswordHash { get; set; } public bool IsDeleted { get; set; } } 分别通过Nuget安装EF...中的modelBuilder.Configurations.AddFromAssembly()方法 ,但是不用担心,杨老师已经给我们封装了一个和EF中相同作用的 Nuget...2、.Net Core中有内置的IOC有三种生命周期,我们采用Singleton 的方式注入,ingleton 生命能够周期服务在第一被请求时创建,在后续的每个请求都会使用同一个实例。...具体实现: 在Controller中使用构造函数注入(不是属性注入) 1)、首先需要在UserSys.IService层中,写一个通用的接口,该接口中不需要定义任何的方法
多对多关系不像其他关系那么简单,在这篇文章中,我将向您展示如何创建多对多关系以及如何在 EF Core 中使用它们。 模型 多对多的简单而实用的例子可能是某种数字电子商务商店。...在本文发表时,EF Core 无法处理这种情况。...手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。】...【实体类型“CartItem”需要定义一个主键。】 对,CartItem没有主键, 由于它是多对多关系,因此它应该具有复合主键。复合主键类似于常规主键,但它由两个属性(列)而不是一个属性组成。...目前,创建复合键的唯一方法是在OnModelCreating. protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating
EF Core与EF比较 1、EF有DB First、Model First、Code First。...EF Core不支持模型优先,推荐使用代码优先,遗留系统可以使用Scaffold-DbContext来生成代码实现类似DBFirst的效果,但是推荐用Code First 。...4、EF中的一些类的命名空间以及一些方法的名字在EF Core中稍有不同。 5、EF不再做新特性增加。...根据对象的定义变化,自动更新数据库中的表以及表结构的操作,叫做Migration(迁移)。 迁移可以分为多步(项目进化),也可以回滚。...modelBuilder.Entity().HasKey(c => c.Number); 6、可以用HasDefaultValue()为属性设定默认值 modelBuilder.Entity
本文主要介绍 DDD 中的强类型 ID 的概念,及其在 EF 7 中的实现,以及使用 LessCode.EFCore.StronglyTypedId 这种更简易的上手方式。...EF 中的使用演示 我们首次创建一个未使用强类型 ID 的 Demo,之后用不同方法实现强类型 ID 进行比较。项目都选择 .NET 7,数据库这里使用的是 MySql 。...我们按照说明先定义类型,对两个类进行改造。...迁移报错 强类型 ID 在数据库里面的表示还是原始的类型,我们还需要在 DbContext 中通过为类型定义值转换器来实现转换: protected override void ConfigureConventions...protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder
使用过其他ORM框架的朋友可能知道一般ORM都有对应的映射配置文件(一般是一个Xml文件),但是EF并没有。...3.使用导航属性约束两个表之间的关系,在从表数据类中除了导航属性,推荐定义一个外键属性在从表数据类中(如果不指定将默认生成一个“+”的外键列;此外在主表中推荐定义一个集合从表属性用户导航...,当然这个属性不定义也可以正常生成外键关系但是不利于使用),具体规则:“+”或者“+”又或者“”,其属性名不区分大小写并且如果出现多种匹配按照先后顺序匹配...4.当EF按照上述规则在数据类中没有找到主键属性时(或者通过fluent API、Data Annotations没有定义)将认为此类为“复杂类型”。 ...Entity Framework 手动定义约定 EF的默认约定不是一成不变的,我们可以选择移除和修改它,例如EF默认生成数据表时将数据类名的复数形式作为表名,下面的代码就可以移除这个规则: using
领取专属 10元无门槛券
手把手带您无忧上云