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

EF Core的增删改查

0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置。 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法。...不过如果有导航属性的话,在新增的时候,EF Core会自动检索导航属性的另一端是否需要新增到数据库中,如果需要新增的话,EF Core会自动标记为新增的。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端的外键是可空类型的,并不会删除导航属性另一端的元素只会设置外键指向为NULL,如果另一端外键是不可空的,那么就会同时删除。...: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 外键属性设置为 null None SetNull 外键属性设置为...Restrict None None 而对于数据的修改,EF Core的做法是通过监控实体的ChangeTracker来实现对数据实体的状态更新。

3.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【愚公系列】2023年09月 .NETC#知识点-EF配置软删除

    SaveChangesInterceptor:该拦截器旨在拦截保存更改操作执行之前或之后的过程中的更改。它可以拦截添加、修改和删除操作,并对其进行修改或者记录。...,主要用于拦截SaveChanges操作执行之前或之后的过程中的更改。...下面是一个SaveChangesInterceptor的例子,其中实现了在创建实体时自动为其添加创建时间和修改时间的功能: public class TimestampInterceptor : SaveChangesInterceptor...在该方法中,我们遍历了ChangeTracker中所有的EntityEntry,并检测其状态是否为添加或修改(Deleted状态不需要添加时间信息)。...如果是添加或修改操作,则在对应的实体的ModifiedTime属性上设置当前时间,并在添加操作时同时设置CreatedTime属性。最后返回拦截操作的结果。

    4300

    【愚公系列】2023年02月 .NETC#知识点-使用控制台手搭webapi框架

    文章目录 前言 一、使用控制台手搭webapi框架 1.配置文件 2.控制台配置 二、EFCore框架DBSet配置详解 1.实体统一配置 2.实体继承统一接口 3.获取程序集所有类 4.批量注入模型类到...EF中 三、EFCore框架表配置详解 1.配置基类, 2.实体表统一配置 3.DBContext中应用配置 四、仓储配置 1.仓储基类 2.仓储实现类 五、Autofac配置 1.注入DBContext...LibraryDbContext和EFCoreEleganceUseEFCoreModule,下面着重详解 二、EFCore框架DBSet配置详解 1.实体统一配置 EF实体继承统一的接口,方便我们反射获取所有...EF实体,接口可以设置一个泛型,来泛化我们的主键类型,因为可能存在不同的表的主键类型也不一样。...builder.HasOne(r => r.User).WithMany(x => x.Books) .HasForeignKey(r => r.UserId).IsRequired(false);//导航属性

    1.6K10

    Entity Framework Core 捕获数据库变动

    在实际项目中我们往往需要记录存储在数据库中数据的变动(例如修改数据前记录下数据的原始值),这样一来在发生误操作时可以将数据恢复到变动前的状态,也可以追溯到数据的修改人。...当然,我们也可以利用数据库触发器来记录这些操作,在 SQL Server 数据库 2017 以上版本中给我们提供了跟踪数据库数据更改的功能,利用这个功能可以准确的记录数据库数据的变动。...在将上述信息转换成 Audit 时提示我们对被操作前的数据和被操作后的数据进行了一个长度判断,这是因为当我们新增数据的时候是没有旧数据的,当我们对数据没有进行任何更改就提交数据的时候是不存在新数据的。...,这里需要注意的一点是部分实体属性是由数据库生成的,例如当前日期、Id等,这些值需要等待 SaveChanges 方法执行完毕后方可获得,也就是说在这种情况下保存审计数据必须在 SaveChanges...属性来获取旧值和新值并保存。

    66610

    UnitOfWork知多少

    UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。...UOW的本质 通过以上的介绍,我们可以总结出实现UOW的几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到的已变更的对象保存到变更列表中 UOW借助事务一次性提交变更列表中的所有更改...EF中的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...从代码中我们可以看出仅做了一次保存,新增加的User、Customer、Address对象都成功持久化到了内存数据库中。从而证明EF Core是实现了Uow模式的。...在DDD中,我们会借助仓储模式来实现领域对象的持久化。

    2.5K81

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

    当然,如果使用 MongoDB 数据库,则需要显示地更新已经更改的实体。 所以,如果你想要编写独立于数据库提供程序的代码,应该总是为要更改的实体调用UpdateAsync()方法。...用于 EF Core 和 关系型数据库 在 MongoDB 中,自然不适合有这样的导航属性/集合。...聚合根/实体中的主键 一个聚合根通常有一个ID属性作为其标识符(主键,Primark Key: PK)。推荐使用 Guid 作为聚合根实体的PK。 聚合中的实体(不是聚合根)可以使用复合主键。...示例:通过方法修改属性 namespace IssueTracking.Issues { public Guid RepositoryId {get; private set;} //不更改 public...实体中业务逻辑需要用到外部服务 当业务逻辑只使用该实体的属性时,在实体方法中实现业务规则是很简单的。如果业务逻辑需要查询数据库或使用任何应该从依赖注入系统中获取的外部服务时,该怎么办?

    3.5K30

    EF基础知识小记三(设计器=>数据库)

    本文主要介绍通过EF的设计器来同步数据库和对应的实体类.并使用生成的实体上下文,来进行简单的增删查该操作 1、通过EF设计器创建一个简单模型 (1)、右键目标项目添加新建项 (2)、选择ADO.Net实体数据模型...图中创建键属性,实体会自动添加一个Id属性,并将该属性设为主键(数据库设计三范式之一,每个表必须有一个主键,且表中的每一列都和主键相关) (6)、实体创建成功,如下图 (7)、给Person实体添加属性...(包括导航属性和标量属性等),如下图 Name属性的详细设计界面如下图,基本都在vs的右下角 (8)、模型设计完毕,因为是第一次同步数据库,需要初始化一些信息(当然不初始化,模型设计器会采用默认值),右键右键计设器窗口...更改数据库架构名称(Database Schema name)为Chapter2,更改实体容器名称(Entity Container Name)为EF6RecipesContext,如下图所示: (9)...、右键设计器,并更具模型生成数据库,如下图: (10)、选择对应的数据库,并选择对应的实体框架,最终结果如下图: (11)、点击完成,生成的Sql文件就会追加到你的项目中 (12)、右击设计器,执行该脚本

    1.1K50

    5个EF core性能优化技巧,让你程序健步如飞

    Like PS:在传统的.Net中,还有种用法 SqlMethods (2).还有EF.Functions.DateDiffDay (DateDiffHour、DateDiffMonth),求天、小时...、月之间的数量 PS:在EF Core中StartsWith、Contains和EndsWith模糊查询实际分别被解析成为Left、CharIndex和Right,而不是Like,而EF.Functions.Like...4、禁用实体追踪 当我们从数据库中查询出数据时,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges 时,实体有任何更改都会保存到数据库中。...但是当我们只需要查询出实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。...具体代码如下: var users = db.Users.AsNoTracking().ToList(); 注:如果是多表查询可以在查询前 db.ChangeTracker.QueryTrackingBehavior

    2.9K50

    如何使用 Hilla 管理全栈 Java 开发

    默认情况下,后端是安全的并且完全无状态。 作为旨在简化 Web 应用程序开发的框架,Hilla 在开源社区中脱颖而出。...Web 组件的属性是反应式的,并在发生更改时自动重新呈现。...个人数据将使用 JPA 存储在数据库中。图 1 显示了结果的样子。示例代码发布在GitHub上。...人员被添加到 Vaadin 网格的项目属性中,“路径”属性用于定义人员属性的路径。为简单起见,此示例不使用分页。如果表包含大量记录,则应使用分页来加载数据的子集。...在主从视图的示例中,另一个视图是延迟加载的,因此仅在用户导航到它时才加载。最后,为视图定义布局,其中包括页眉和页脚等元素以及导航组件。

    1.4K30

    asp.net core 系列之并发冲突

    1.用户导航到实体编辑页面;   2.第一个用户的更改还未写入数据库之前,另一个用户更新同一实体;   此时,如果未启用并发检测,当发生更新时:   最后一个更新优先。...可能会增加应用复杂性(与实体上的并发检测相比)。 体现在例子中,就是如果下次有人浏览英语系时,将看到 Jane 和 John 两个人的更改。...并且可以 显示错误消息 显示数据的当前状态 允许用户重新应用更改。 处理并发 当属性配置为并发令牌时: EF Core 验证提取属性后是否未更改属性。...注意:rowversion ,  1.它是 SQL Server 特定的。 其他数据库可能无法提供类似功能。 2.用于确定从数据库提取实体后未更改实体。...如果要更新的行已经修改,则 rowversion提取值与现在数据库中rowversion的值不匹配; update 或 delete 命令不能找到行。

    1.8K20

    02-EF Core笔记之保存数据

    EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据时,调用DbContext的SaveChanges方法完成保存。...如果要更改关系的引用,可将Post对象中的Blog引用设置为其它Blog对象即可: using (var context = new BloggingContext()) { var blog...默认情况下,每次SaveChanges方法的所保存的所有更改都将在一个事务中,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用的需要。...并发控制 数据库并发指多个进程或用户同时访问或更改数据库中的相同数据的情况。 并发控制指的是用于在发生并发更改时确保数据一致性的特定机制。 EF Core采用乐观并发控制来解决并发冲突问题。...,并对发生改变的属性进行重新赋值,未发生改变的值保持不变,生成更新数据库语句时也仅更新改变的字段。

    1.9K40

    【Java 进阶篇】深入理解 Bootstrap 导航条与分页条

    Bootstrap 是一个强大的前端框架,为网页和应用程序开发提供了丰富的组件和工具。其中,导航条和分页条是两个常用的组件,用于创建网站的导航和分页功能。...: 元素:这是 HTML 中的导航元素,用于创建导航条。...点击链接 “下拉菜单” 将显示下拉菜单中的选项。这是一种很好的方式来组织和呈现导航选项。 Bootstrap 分页条 分页条是用于分页显示大量内容的常见组件。...class="page-link":这是分页链接的样式类。 aria-label 属性:这是用于指示链接用途的属性,如 “上一页” 或 “下一页”。...您可以更改分页按钮的样式、显示的页数、上一页和下一页的文字等。

    78620

    EF 约定介绍

    当前环境为EF Code First开发模式中 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...,EF会默认将长得最像Id的属性(且类型为GUID)设为主键,如果类中的属性(Property)名称为 ID (不区分大小写)或 ClassNameID(类名 + ID),Code First 则推断这个属性为主键...) Convention EF中,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式在两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象...(对象间的关系是1:0或1:1),或者对象的集合(对象间的关系是1:*或*:*),Code First 能够根据导航属性定义的方式来推断实体间的关系.并映射到数据库表中....除了导航属性规定实体间的关系外,外键属性来式规定实体间方式的一种手段.Code First能够推断以下的命名属性为外键(优先级从上到下): (1)、导航属性名+关联实体的主键名 (2)、关联实体实体名+

    1.9K100

    基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 对象设计器使用帮助

    导航栏默认显示在界面的左边,如果你想让业务工作区更大些,以便有更大的界面空间处理业务功能,你可以在进入相关的业务功能模块后,通过系统菜单或工具栏的导航命令隐藏或显示功能导航栏。...添加目录        在导航栏中的实体节点右键点开快捷菜单,选择“新建目录”,系统打开目录属性圣诞框: ?       ...目录属性        在导航栏中的某个目录节点右键点开快捷菜单,选择“目录属性”,系统打开目录属性圣诞框: ?       ...添加对象        在导航栏中的实体节点或者目录节点右键点开快捷菜单,选择“新建实体”,系统工作区打开一个新的对象定义Tab页: ?       ...//     运行时版本:2.0.50727.3053 // //     对此文件的更改可能会导致不正确的行为,并且如果 //     重新生成代码,这些更改将会丢失。

    1.3K50
    领券