首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# 数据操作系列 - 6 EF Core 配置映射关系

EF Core 入门》篇,我们简单通过两个类演示了一下EF增删改查等功能。细心小伙伴可能看了生成DDL SQL 语句,在里面发现了些端倪。没看小伙伴也不急,这就贴出来。...对于主键,默认情况下EF检索实体类有没有名为Id或者类名+Id属性,如果有EF则认为这个属性是主键,否则会认为该类没有设置主键。EF检索到主键类型是数字类型的话,会自动添加自增长约束。...对于其他属性EF会自动按照同名形式映射到数据表。 对于,如果在类里添加了引用类型,而这个引用类型也在EF上下文中,EF会把这种属性称为导航属性。...EF一旦在类里检索到了导航属性,就会去寻找对应EF会认为 属性名+Id或者类名+Id 可能是属性,如果找到名称一致且类型与导航属性目标类主键类型一致,则认为是。...如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求属性EF会自己添加一个属性。 对于一对一,EF要求导航属性双方都应该具有配置。 一对多,EF要求多一方设置

2.6K21

02-EF Core笔记之保存数据

Core,除了独立模型,还有与模型关联数据,这部分数据通过独立模型添加到模型,在SaveChanges时将会持久化到数据库。...Blog引用设置为null即可,此时EF Core将判断是否为必须关系,如果为必须关系,则从数据库删除Post对象,如果为非必须关系,则将数据库对应设置为null。...“原始值”是在进行任何编辑之前最初数据库检索值。 “数据库值”是当前存储在数据库值。 此处可进行数据合并或用户选择等方式决策如何解决冲突。...除此之外,如果实体使用自动生成主键,EF Core则可以通过判断主键是否为默认值(null、0)来判断是新增或更新。...例如Blog对象中有多个Post对象,如果Blog删除部分Post,则意味着直接移除了Post对象,此时如果是断开连接情况,则EF Core无法跟踪到Post实体列表变更,从而导致无法正确处理删除

1.7K40
您找到你想要的搜索结果了吗?
是的
没有找到

EF Core增删改查

不过如果有导航属性的话,在新增时候,EF Core会自动检索导航属性另一端是否需要新增到数据库,如果需要新增的话,EF Core会自动标记为新增。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端是可空类型,并不会删除导航属性另一端元素只会设置键指向为NULL,如果另一端是不可空,那么就会同时删除。...: 行为名称 对内存依赖项/子项影响 对数据库依赖项/子项影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 属性设置为 null None SetNull 属性设置为...null 属性设置为 null Restrict None None 而对于不可为NULL来说,枚举DeleteBehavior值起以下作用: 行为名称 对内存依赖项/子项影响 对数据库依赖项...也就是说,如果你EF Core上下文获取了一个实体对象,对这个对象某些值进行了修改。这时候EF Core其实已经记录了这个对象修改。

3K20

EF Core 导航属性配置

在上一篇,大概介绍了Entity Framework Core关于关系映射逻辑。在上一篇留下了EF映射没有说,也就是一对一,一对多,多对一,多对多关系等。...意思就是无法定义一对一关系子/从属方 如何解决呢?之前在说时候,EF会根据导航属性自动生成一个,但是这一条在一对一这里就有点不太起作用了。...所以我们必须手动在导航属性一侧实体类里配置,并用 HasForeignKey指定。(如果不使用Fluent API,也是需要在一端实体类配置,另一端则不需要)。...,现在EF只在SingleModel表中生成了一个关系,在检索SingleTargetModel时候,EFSingleModel表检索对应关系,并引入进来。...在EF 6 中间表可以仅存在于关系,但是在EF Core3 还没有这个支持。也就是当前文章使用版本。 5. 附加 在EF约束,导航属性是默认可空

3K20

01-EF Core笔记之创建模型

使用EF Core第一步是创建数据模型模型好,下班走早。EF Core本身已经设置了一系列约定来帮我们快速创建模型,例如表名、主键字段等,毕竟约定大于配置嘛。...默认情况下,如果你类型包含一个字段,那么EF Core都会将它映射到数据库,导航属性亦是如此。...() .Property("LastUpdated"); 阴影属性 阴影属性指的是在实体未定义属性,而在EF Core模型为该实体类型定义属性,这些类型只能通过变更跟踪器进行维护...):基类和子类不在同一个表,子类包含基类所有字段,目前EF Core不支持该模式 EF Core仅支持TPH模式,基类和子类数据将存储在同一个表。...实体构造函数 EF Core支持实体具有有参构造函数,默认情况下,EF Core使用无参构造函数来实例化实体对象,如果发现实体类型具有有参构造函数,则优先使用有参构造函数。

3K20

EntityFramework Core 学习扫盲

列名称和类型映射 Property方法对应数据库Column。 默认情况下,我们不需要更改任何实体包含属性名,EF CORE会自动地根据属性名称映射到数据库列名。...备用 Alternate Keys是EF CORE引入新功能,EF 6.X版本并没有此功能。备用可以用作实体除主键和索引唯一标识符,还可以用作目标。...在Fluent Api,有两种方法可以指定备用,一种是当开发者将实体属性作为另一个实体目标,另一种是手动指定。EF CORE默认约束是前者。...Post实体BlogUrl属性作为Blog对应Post,指定Blog实体Url属性作为备用(HasPrincipalKey方法将在下文唯一标识节中讲解),此时Url将被配置为唯一列,扮演...虽然主体也包括主键,但是主键在EF CORE时强制定义,所以HasPrincipalKey只会将属性配置为备用。 2.

9.5K90

ASP.NET MVC5高级编程——(3)MVC模式模型

模型一般有:面向业务模型对象和面向视图模型对象。 2 什么是主键属性,什么是属性?...首先数据库主外定义: 主键 定义: 唯一标识一条记录,不能有重复,不允许为空 表是另一表主键, 可以有重复, 可以是空值 作用: 用来保证数据完整性 用来和其他表建立联系用...个数: 主键只能有一个 一个表可以有多个 因为这个主外属性对于理解后面的EF框架(ORM)很有帮助,所以这里我们多讲一些!...而称ArtistID属性属性(foreign key),因为与模型对应数据库,专辑表(Album)和艺术家(Artist)表存在对应关系,即ArtistID是Album表!...简单来说,模型绑定作用:自动视图Form集合提取网页属性值,比如name属性,然后存储到模型类(如Album),也就是说,当模型绑定器读取到Album具有Name属性时候,自动在请求寻找名为

4.6K40

一步步学习EF Core(3.EF Core2.0路线图)

因为EF Core是一个新代码库,所以在Entity Framework 6.x存在一个功能并不意味着会在EF Core实现。...数据库更新模型允许以前数据库逆向工程模型将随着您对架构更改而刷新。   3.3Modelling(实体模型) 复数/值类型是不具有主键类型,用于表示实体类型上一组属性。...改进视图映射,允许EF自动数据库逆向工程视图或使用迁移维护它们(DBFirst)。 4.高优先级功能 实体模型 更灵活属性映射,如构造函数参数,get / set方法,属性包等。...ETag式并发令牌支持提供了统一编码模式,用于管理与模型配置无关并发性。 贪婪加载,允许在查询实体时始终检索默认相关数据集。 过滤加载,允许加载相关实体一个子集。...原来考虑加入,但没有进展,基本上要推迟内容: 用于非实体类型原始SQL查询(#1862) - 使用不在模型类型执行具有临时映射查询。

3K90

Entity Framework Core 2.0 新特性

此特性允许使用Linq查询表达式直接定义在实体类型元数据模型上。这样过滤器会自动应用到任何LINQ查询所涉及那些实体类型,包括间接引用实体类型(对象引用,导航属性)。...在 ef core 2.0 ,我们将自定义DbContext类型注册到DbContextPool服务,可让该数据库上下文类型实例重复使用。...要使用表拆分,必须在共享表所有实体类型之间配置标识关系(属性构成主键) 示例代码: 1 modelBuilder.Entity() 2 .HasOne(e => e.Details...目前只支持标量函数 EF Core迁移将不负责创建它,您必须在数据库创建映射函数 九.code first 实体配置   在EF6可以通过 EntityTypeConfiguraiton 封装特定实体类型配置代码...,在EF Core2.0,这个特性回来了(EF Core 之前 core版本不支持)。

1.8K50

张高兴 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

),但依然吸引到很多后端开发者使用,原因如下: EF Core 由 .NET 官方进行开发维护,出现问题解决较为及时,这是很多国产 ORM 框架不具有的优势; EF Core 和 C# 语法高度绑定,...项目依赖 使用 Scaffold-DbContext 命令生成实体类 手动创建实体实体属性映射 列映射 主键映射 导航属性 创建数据库上下文 数据库查询 准备工作 准备工作包含两部分...实体属性 每一个实体类都有一组属性EF Core 会将实体属性映射到数据库表列。 表映射 对数据库表进行映射,使用 Table() Attribute。...导航(Navigation)属性是数据库表之间关系在实体体现。...在设置导航属性之前,首先需要理清楚医院和医生存在着怎样数量关系,医生是医院附属,一家医院下面会有多名医生,因此医院和医生之间是一对多关系。为了方便理解,下面只保留主键、和导航属性

2.4K10

Entity Framework Core 2.0 新特性

(本文英文原文地址:这里) 1.实体方面的新内容     1.1表拆分      现在可以将多个实体类型映射到将要共享主键列同一个表,并且每一行将对应于两个或多个实体。    ...使用表拆分识别关系(其中外属性形成主键)必须在共享表所有实体类型之间进行配置: modelBuilder.Entity() .HasOne(e => e.Details)....使用所属类型与EF6使用复杂类型类似,(PS:这里解释一下EF6复杂类型,复杂类型是允许在实体组织标量属性实体类型非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...,并将更多逻辑生成SQL让它在数据库执行(而不是内存),并且数据库检索更少不必要数据。...() 添加了EF.Functions属性(注意,这里应该是可以扩展,添加更多数据库方法),EF Core可以使用它们来定义映射到数据库函数或操作符方法,以便可以在LINQ查询调用它们。

3.8K90

EntityFramework 键值映射

如果在 EF OnModelCreating 配置了实体映射,也就是 SQL Server ForeignKey,那么我们在添加实体时候,主实体主键值会自动映射到子实体键值,并且这个操作在一个...SaveChanges ,但如果没有在 OnModelCreating 中进行映射配置,我们添加实体时候,就不会自动映射键值了,什么意思呢?...} 需要注意是,我们并不需要在 OnModelCreating 中进行 Class 和 ClassId 映射配置,EF 会自动查找 ClassId(属性名 + Id),所以,“”命名要注意规范统一...就是实体更改了,需要进行 EF 迁移,如果你进行 EF 迁移的话,会发现,虽然我们没有在 OnModelCreating 中进行 ClassId 映射配置,但 EF 也会自动映射 ForeignKey...在c#,如果实体属性没有赋值,一般都会取默认值,比如int类型默认值为0,string类型默认值为null, 那DateTime默认值呢?

4.1K50

EF基础知识小记五(一对多、多对多处理)

本文主要讲EF一对多关系和多对多关系建立 一、模型设计器 1、一对多关系 右键设计器新增关联 导航属性属性可修改 2、多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生成数据库...,根据数据库生成模型就能生成对应模型 三、多对多无载荷 根据上面的建表语言,我们能得出Teacher表和Student表在数据库关系如下图: 数据库关系图: 在模型设计器关系如下图: 模型设计图...: 观察二图区别,发现数据库表关系图中StudentTeacher(链接表)没有出现在模型设计器。...原因如下: 因为链接表没有标量属性(没有载荷),实体框架认为它存在唯一价值就是联结Teacher和Student,没有标量属性联结表,在各自实体中将以ICollection集合形式出现....当你导入表到你模型时,你将得到两个包含一对多关系实体,这意味着,你代码为将来有可能出现多载荷做好了准备。增加一整型标识列代价通常很小,但给模型带来了更大灵活性。

2.3K80

EF 约定介绍

当前环境为EF Code First开发模式 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键时候,EF会默认将长得最像Id属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示指定一对多关系,EF会默认设置主外(主从)关系 (3)、一对一实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...除了导航属性规定实体关系,属性来式规定实体间方式一种手段.Code First能够推断以下命名属性(优先级从上到下): (1)、导航属性名+关联实体主键名 (2)、关联实体实体名+...关联实体主键名 (3)、关联实体主键名 注: (1)、当关系被检测到,Code First会根据可空性来推断关系具体形式;如果属性是可空,那么关系会被设置为可选,否则,关系就是必选.... (2)、当关联实体属性被设置为不为空,Code First会设置级联删除,反之不会。

1.6K100

如何运用领域驱动设计 - 存储库

是的,这样疑问相信不止很多同学都遇到了。所以在微软EF Core 3.x官方教程,提到了这样一句话: ? 该内容位于 ASP.NET Core 官方教程 - 数据访问 - 高级教程 。...还记得在上一篇文章 如何运用领域驱动设计 - 聚合 ,我们不止一次提到了仓储这个概念,因为它是为聚合而服务,而随着领域深入,使得领域模型越来越复杂时候,存储库将慢慢变成模型扩展,它将描述您每一个用例检索聚合意图...虽然存储库提供了基础提取方法,但是在许多场景下,我们可能更需要根据某种条件来数据库读取对应模型并将其转换为领域聚合对象。...不要使用过多特性干扰您领域对象 在持久化过程,现在主流方式我们都会依赖于类似于EF Core这样ORM框架来完成。...Core 教程 - 必需和可选属性 这种写法很诱人,因为只需要简单属性上增加一个特性就完成了配置。

94530

【数据库系统概论】

(一张表) (2)属性(Attribute) 实体具有的某一特性称为属性。一个实体可以由若干个属性来刻画。 (字段) (3)码(Key) 唯一标识实体属性集称为码。...(主键) (4)实体型(Entity Type) 用实体名及其属性名集合来抽象和刻画同类实体称为实体型 (5)实体集(Entity Set) 同一类型实体集合称为实体集 (6)联系(Relationship...属性(Attribute)——表一列即为一个属性,给每一个属性起一个名称即属 性名 主码(Key)——也称码。...表某个属性组,它可以唯一确定一个元组 域(Domain)——是一组具有相同数据类型集合。 属性取值范围来自某个域。...悬浮元组:自然连接时某些为null值行会被除去,悬浮元组能够保留存在null列(也就是常用连接) 左(右)连接区别就在于:只保留左(右)悬浮元祖 除运算 同时考虑行和列。

1.3K10

EF Core索引

modelBuilder.Entity() .HasIndex(p => new { p.FirstName, p.LastName }); }  备注 按照约定,将在用作每个属性...EF Core 每个不同属性集仅支持一个索引。 如果使用 "熟知 API" 来配置已定义索引属性索引(按照约定或以前配置),则会更改该索引定义。 ...modelBuilder) { modelBuilder.Entity() .HasIndex(b => b.Url) .IsUnique(); } 尝试为索引列集插入多个具有相同值实体将导致引发异常..."); } 当使用 SQL Server 提供程序 EF 时,将为唯一索引包含所有可以为 null 列添加 'IS NOT NULL' 筛选器。 ...当查询所有列都作为列或非列包含在索引时,这可以显著提高查询性能,因为表本身无需访问。 有关 SQL Server 包含列详细信息,请参阅文档。

1.5K10

基于ABP落地领域驱动设计-02.聚合和聚合根最佳实践和原则

聚合应该通过实现领域规则和规约来保持自身完整性和有效性。这意味着,与数据传输对象(DTO)不同,实体具有实现业务逻辑方法。实际上,我们应该尽可能在实体实现业务规则。...用于 EF Core 和 关系型数据库 在 MongoDB ,自然不适合有这样导航属性/集合。...然而,EF Core 和关系型数据库开发者可能会发现这个限制性规则是不必要,因为 EF Core 可以在数据库读写处理它。...code 用作本地化资源文件一个,用于查找本地化消息。...实体业务逻辑需要用到外部服务 当业务逻辑只使用该实体属性时,在实体方法实现业务规则是很简单。如果业务逻辑需要查询数据库或使用任何应该依赖注入系统获取外部服务时,该怎么办?

2.9K30
领券