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

EF核心更新外键不会更新导航属性

EF(Entity Framework)是微软推出的一种ORM(对象关系映射)框架,用于简化开发人员在应用程序中访问数据库的过程。它提供了一种将数据库中的表映射到.NET对象的方式,使开发人员可以使用面向对象的方式进行数据库操作。

在EF中,外键是用于建立表之间关系的一种机制。当我们更新外键时,EF默认情况下不会自动更新导航属性。导航属性是指在实体类中定义的与其他实体类之间的关系属性。

这种行为是由EF的设计决策所决定的,其目的是为了避免不必要的数据库查询和数据传输。如果EF自动更新导航属性,那么在更新外键时,它可能会导致额外的查询和数据传输,从而影响性能。

然而,如果我们确实需要在更新外键时同时更新导航属性,我们可以通过手动加载导航属性或使用EF的显式加载功能来实现。手动加载导航属性可以通过调用context.Entry(entity).Reference(e => e.NavigationProperty).Load()context.Entry(entity).Collection(e => e.NavigationProperty).Load()来完成。显式加载可以通过调用context.Entry(entity).Reference(e => e.NavigationProperty).Query().FirstOrDefault()context.Entry(entity).Collection(e => e.NavigationProperty).Query().ToList()来完成。

总结起来,EF核心更新外键不会自动更新导航属性,这是为了避免不必要的查询和数据传输。如果需要更新导航属性,可以通过手动加载或显式加载来实现。

腾讯云提供了云数据库 TencentDB for MySQL 和云数据库 TencentDB for SQL Server,可以作为EF的数据库后端。您可以通过以下链接了解更多关于腾讯云数据库的信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【MySQL】约束的删除和更新总结

约束的删除/更新行为 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除/更新。...(与RESTRICT一致) RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应,如果有则不允许删除/更新。...(与NOT ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应,如果有,则也删除/更新在子表总的记录。...主表字段名) on update cascade on delete cascade -- 添加约束并指定的删除和更新行为 alter table emp add constraint...-- 添加约束并指定的删除和更新行为 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references

32210

【MySQL】一文带你搞定 约束&其【更新删除行为】(可cv代码&案例演示)

table emp drop foreign key fk_emp_dept_id; 三.约束的【添加 / 删除】操作 1.约束概念&应用场景&约束添加语法 约束: 用来让两张表的数据之间...约束添加语法如下所示: 约束删除语法如下所示: alter table 表名 drop 键名称 foreign key(字段名) references 主表(主表列名); 2.约束...fk_emp_dept_id; 四.针对 约束【更新 / 删除 】的 on行为(可cv语句) 1.行为一览&语法 如下所示 cascade即我们所熟知的 级联 语法如下所示 ALTER...; 2.CASCADE级联演示 针对我们在博客上文,添加;我们进行级联行为 的删除和更新行为 alter table emp add constraint fk_emp_dept_id foreign...我们即可在其中选择其【更新 / 删除行为】

1.2K10

EF Core的增删改查

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

3K20

生成的迁移类

添加关联种子数据 Province和City是一对多的关系,也就是说一个Province可以有多个City,而且它们之间有导航属性。...我必须单独添加City的种子数据,并且设置好。...所以正确的做法是: 这次Add-Migration没有报错,迁移也成功了,看一下最后的数据: OK 如果无法在Model里设置主键/ 有时,我们在主从关系的Model里不明确定义;有时候我们...我把City Model里的去掉(导航属性仍然保留,和Province的主从关系依然存在): 然后就可以这样添加种子数据: 迁移后的数据: 结果仍然如预期一样。...但是如果数据库已经存在了,那么EnsureCreated()不会更新数据库,也不会添加种子数据了。

1K10

Entity Framework Core 2.1,添加种子数据

添加关联种子数据 Province和City是一对多的关系,也就是说一个Province可以有多个City,而且它们之间有导航属性。...我必须单独添加City的种子数据,并且设置好。 所以正确的做法是: ? 这次Add-Migration没有报错,迁移也成功了,看一下最后的数据: ?...OK 如果无法在Model里设置主键/ 有时,我们在主从关系的Model里不明确定义;有时候我们Model的主键是private set的; 这时我们就无法在HasData里设置主键/的值了...我把City Model里的去掉(导航属性仍然保留,和Province的主从关系依然存在): ? 然后就可以这样添加种子数据: ? 迁移后的数据: ? 结果仍然如预期一样。...但是如果数据库已经存在了,那么EnsureCreated()不会更新数据库,也不会添加种子数据了。

1.6K10

EF 约定介绍

如果主键属性的类型为数字型或 GUID 则会被当成标识列(Identity Column) 4、关系(/导航属性)约定Relationship(Foreign Key/Navigation Properties...) Convention EF中,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式在两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象...除了导航属性规定实体间的关系,属性来式规定实体间方式的一种手段.Code First能够推断以下的命名属性(优先级从上到下): (1)、导航属性名+关联实体的主键名 (2)、关联实体实体名+...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当关系被检测到,Code First会根据的可空性来推断关系的具体形式;如果属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的.... (2)、当关联实体的属性被设置为不为空,Code First会设置级联删除,反之不会

1.6K100

Entity Framework 约定

我们定义完模型,还需要让EF上下文你知道应该映射那些模型,此时我们需要通过 DbSet 属性来暴露模型的。...如果一个类中既没有id属性,也没有类名+id的属性,那么代码在运行时将会报错,因为EF没有找到符合要求的字段创建主键。...EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性属性结合在一起使用。...导航属性的命名规则如下:导航属性名称+主体主键名称 或者 主体类名+主键属性名称 或者 主体主键属性名。...当EF检测出外属性后,会根据属性是否为空来判断关系,如果可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。

1.3K10

EF Core 导航属性配置

之前在说的时候,EF会根据导航属性自动生成一个,但是这一条在一对一这里就有点不太起作用了。所以我们必须手动在导航属性的一侧实体类里配置,并用 HasForeignKey指定。...其他数据库提示,不能为空。 所以也就是说EF不推荐这种双方互导航的一对一关系。...其中 WithXXX里的参数可以省略,如果只是配置了单向导航的话。 如果显示声明了,需要用HasForeignKey来标注。...多对多,对于导航两端来说,是无法在自己身上找到对应的标记的。也就是说,各自的数据表不会出现指向对方的。那么,如何实现多对多呢?增加一个专门的中间表,用来存放两者之间的关系。...在EF 6中 中间表可以仅存在于关系中,但是在EF Core3 还没有这个的支持。也就是当前文章使用的版本。 5. 附加 在EF约束中,导航属性是默认可空的。

3K20

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

对于其他属性EF会自动按照同名的形式映射到数据表中。 对于,如果在类里添加了引用类型,而这个引用类型也在EF的上下文中,EF会把这种属性称为导航属性。...EF一旦在类里检索到了导航属性,就会去寻找对应的EF会认为 属性名+Id或者类名+Id 可能是属性,如果找到名称一致且类型与导航属性目标类的主键类型一致,则认为是。...如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求的属性EF会自己添加一个属性。 对于一对一,EF要求导航属性双方都应该具有配置。 一对多,EF要求多的一方设置。...同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类里寻找属性。 说完了一对一和一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....总结 在这一篇领着大家看了一下EF Core对于映射关系这一部分的内容,我留下了相关的FluentAPI介绍,我打算在下一篇介绍。因为这部分的内容比较麻烦,而且使用率也相当高。

2.6K21

OpenOOD更新v1.5:全面、精确的分布检测代码库及测试平台,支持在线排行榜、一测试

新智元报道 编辑:LRS 【新智元导读】你是否想了解分布检测(OOD detection)的最前沿方法及其表现却迷失在在数量繁多的论文中?...分布(OOD)检测对于开放世界智能系统的可靠运行至关重要,但目前面向对象的检测方法存在「评估不一致」(evaluation inconsistencies)的问题。...可一测试的评估器。 如上图所示,仅用几行代码,OpenOOD的评估器就可以在指定的ID数据集上给出所提供的分类器、后处理器的OOD检测测试结果。...OOD的概念是相对于ID形成的:ID语义类别之外的、与ID类别不同的任何语义类别所对应的图片都是分布OOD图片。...熟悉的小伙伴可能已经发现,全谱OOD检测中的目标(1)实际上对应着另一个很重要的研究课题——分布泛化(OOD generalization)。

28720

Entity Framework Core 2.0 入门

虽然不使用的话也不会报错, 但是, 整个过程就会变成这样, context把整个表的数据家在到内存里, 然后返回第一条/最后一条数据. 如果表的数据比较多的话, 那么就会有性能问题了. 更新数据....很简单, context所追踪的model属性变化后, SaveChanges就会更新到数据库. 当然, 多个更新操作和插入等操作可以批量执行. 离线更新....然后更新到数据库. 可以看到, 在这种情况下, EfCore会更新该model到所有属性....插入关联数据有几种情况: 1.直接把要添加的Model的导航属性附上值就可以了, 这里的Department不需要写....这时, 因为该数据是被context追踪的, 所以只需在它的导航属性添加新记录, 然后保存即可. 3.离线数据添加导航属性. 这时候就必须使用了. 预加载关联数据 Eager Loading.

3.1K80

Entity Framework Core 2.0 入门

虽然不使用的话也不会报错, 但是, 整个过程就会变成这样, context把整个表的数据家在到内存里, 然后返回第一条/最后一条数据. 如果表的数据比较多的话, 那么就会有性能问题了. 更新数据....很简单, context所追踪的model属性变化后, SaveChanges就会更新到数据库. 当然, 多个更新操作和插入等操作可以批量执行. 离线更新....然后更新到数据库. 可以看到, 在这种情况下, EfCore会更新该model到所有属性....插入关联数据有几种情况: 1.直接把要添加的Model的导航属性附上值就可以了, 这里的Department不需要写....这时, 因为该数据是被context追踪的, 所以只需在它的导航属性添加新记录, 然后保存即可. 3.离线数据添加导航属性. 这时候就必须使用了. 预加载关联数据 Eager Loading.

3.5K140

01-EF Core笔记之创建模型

}); //组合备用 必填和选填 映射到数据库的必填和可空,在约定情况下,CLR中可为null的属性将被映射为数据库可空字段,不能为null的属性映射为数据库的必填字段。...默认情况下,如果你的类型中包含一个字段,那么EF Core都会将它映射到数据库中,导航属性亦是如此。...按照约定,EF Core不会设置任何并发控制的令牌字段,但是我们可以通过Fluent API或数据标注进行配置。 数据标注使用ConcurrencyCheck特性标注。...public string TagId { get; set; } public Tag Tag { get; set; } } Blog和Tag是多对多的关系,显然无论在Blog或Tag中定义都不合适...或protected 暂不支持在构造函数中使用导航属性 使用构造函数时,比较好玩的是支持依赖注入,我们可以在构造函数中注入DbContext、IEntityType、ILazyLoader、Action

3K20

Entity Framework 系统约定配置

3.使用导航属性约束两个表之间的关系,在从表数据类中除了导航属性,推荐定义一个属性在从表数据类中(如果不指定将默认生成一个“+”的列;此外在主表中推荐定义一个集合从表属性用户导航...,当然这个属性不定义也可以正常生成关系但是不利于使用),具体规则:“+”或者“+”又或者“”,其属性名不区分大小写并且如果出现多种匹配按照先后顺序匹配...;如果不存在外属性关系注册为可选的,否则注册为必选项并且此时将设置级联删除关系;如果在从表类中有多个导航属性对应同一个数据类那么需要使用fluent API或者Data Annotations进行手动配置...例如有一个Order类,主键为OrderID,在OrderDetail类中有一个导航属性Order(Order类型),那么当你定义一个OrderID在OrderDetail中,那么在Order和OrderDetail...4.当EF按照上述规则在数据类中没有找到主键属性时(或者通过fluent API、Data Annotations没有定义)将认为此类为“复杂类型”。

81820

C# 数据操作系列 - 14 深入探索SqlSugar

1.2 动态配置 与EF等一样,SqlSugar也支持动态配置,那么就跟着我一起去看看,如何实现动态配置吧: SqlSugar支持的动态配置功能较少,最好是预先设计好了数据库,然后使用动态配置做好关联。...关联 SqlSugar中并没有设置导航属性的正式加载,而是添加了一个Mapper方法:在查询的时候,调用Mapper映射关系,以达到导航属性一起加载的功能。...首先需要注意的是,在SqlSugar中导航属性需要配置为忽略,避免被直接解析为SQL,否则会提示Sequence contains no elements。...所谓主对象就是必须持有一个键指向另一个表。 一对多要求从拥有集合属性的那段(也就是其中的“一”)开始,关联指示为 集合.First(). 。...还有一点就是SqlSugar的导航属性必须手动加载,不会自动加载进来,所以完全不会出现深度递归的问题。 3.

1.8K30

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

也就是说这些对象代表着应用程序关注的域,模型就是要显示、保持、创建、更新和删除的对象。而模型一般有:面向业务的模型对象和面向视图的模型对象。 2 什么是主键属性,什么是属性?...首先数据库中主外的定义: 主键 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的是另一表的主键, 可以有重复的, 可以是空值 作用: 用来保证数据完整性 用来和其他表建立联系用的...个数: 主键只能有一个 一个表可以有多个 因为这个主外属性对于理解后面的EF框架(ORM)很有帮助,所以这里我们多讲一些!...这是为了给EF框架提供一个钩子,即方便模型到数据库的映射,不理解就记住,后面的项目会详细讲解。 从上面三个类的代码可以看到,红色标记的是主键,而黄色的就是。...而称ArtistID属性属性(foreign key),因为与模型对应的数据库中,专辑表(Album)和艺术家(Artist)表存在对应的关系,即ArtistID是Album表的

4.7K40

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

本文主要讲EF一对多关系和多对多关系的建立 一、模型设计器 1、一对多关系 右键设计器新增关联 导航属性属性可修改 2、多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生成数据库...clustered (Id Asc) alter table Teacher add constraint [PK_Teacher] primary key clustered (Id Asc) 1、一对多(通过...) --但约束(一对多) alter table InfoCard add constraint [FK_InfoCard_Student] foreign key (StudentId) references...Student (Id) on delete no action on update no action 2、多对多(中间表双主键双) --双主键约束(多对多) alter table StudentTeacher...add constraint [PK_StudentTeacher] primary key clustered (StudentId,TeacherId Asc) --双约束(多对多) alter

2.3K80
领券