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

02-EF Core笔记之保存数据

Blog引用设置为null即可,此时EF Core判断是否为必须关系,如果为必须关系,则从数据库中删除Post对象,如果为非必须关系,则将数据库中对应外键设置为null。...并发控制 数据库并发指多个进程或用户同时访问或更改数据库中相同数据情况。 并发控制指的是用于在发生并发更改时确保数据一致性特定机制。 EF Core采用乐观并发控制来解决并发冲突问题。...除此之外,如果实体使用自动生成主键,EF Core则可以通过判断主键是否为默认(null、0)来判断是新增或更新。...例如Blog对象中有多个Post对象,如果从Blog中删除部分Post,则意味着直接移除了Post对象,此时如果是断开连接情况,则EF Core无法跟踪到Post实体列表变更,从而导致无法正确处理删除...一种可用方案是采用软删除,数据标记为已删除,此时操作与更新相同。然后在查询数据时,使用查询筛选器,标记为已删除数据过滤掉,从而达到删除效果。

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

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

领域对象是DDD核心,我们会依次分析聚合/聚合根、仓储、规约、领域服务最佳实践和规则。内容较多,会拆分成多个章节单独展开。...下图显示了业务场景对应聚合、聚合根、实体对象以及它们之间关系。 Issue 聚合是由 Issue(聚合根)、Comment(实体)和 IssuelLabel(对象)组成集合。...聚合 正如前面所讲,一个聚合是一系列对象实体对象集合,通过聚合根所有关联对象绑定在一起。本节介绍与聚合相关最佳实践和原则。...当然,我们可能需要处理多个聚合实例作为单一用例更改场景,此时需要使用数据库事务确保更新操作原子性和数据一致性。...可以防止不同聚合相互操作,以及聚合业务逻辑泄露另一个聚合。

2.9K30

EF Core中避免贫血模型三种行之有效方法

要解决这个问题,我们有两个选择: 验证逻辑添加到属性设置器 防止直接修改属性,改为使用与用户操作相对应方法 向属性设置器添加验证是完全可以接受,但意味着我们不能再使用自动属性并且必须引入一个后台字段...通过删除无参数构造函数和公共属性设置器并添加动作类型方法,我们现在拥有了始终有效领域对象,并包含了与所讨论实体直接相关所有业务逻辑,这是一个很大改进。...通常DDD概念中可以简化代码是我们将在下面讨论对象使用。 3.3.引入对象 对象是不可变(实例化后不允许更改)没有身份标识对象对象通常可以用来代替领域对象一个或多个属性。...为了使数据有效,这两条信息都是必需。因此,对它们进行建模是有道理。请注意,参数化构造函数和私有属性设置使用方式与我们在建模领域对象时所使用完全相同实体框架也需要一个私有无参数构造函数。...在(RDBMS)数据持久性上下文中,类型不存在于单独数据库表中。为了让我们在实体框架中使用对象,需要一个小改动。这取决于您使用EF版本。

1.3K40

Entity Framework Core 2.0 新特性

此特性允许使用Linq查询表达式直接定义在实体类型元数据模型上。这样过滤器会自动应用到任何LINQ查询所涉及那些实体类型,包括间接引用实体类型(对象引用,导航属性)。...六.表拆分(Table splitting)   现在可以两个或多个实体类型映射到同一表,其中主键列将被共享,每一行对应两个或多个实体。   ...owned实体类型共享相同CLR类型。...但是由于它不能被CLR类型识别,所以必须从另一个实体类型导航到它。包含定义导航实体是所有者。当查询所有者时,默认包含所属类型。   ...凡是转载于本人文章,不能设置打赏功能,如有特殊需求请与本人联系!

1.9K50

Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

(2):ObjectStateManage,它职责是维护实体类型实例和关系实例对象状态和标识管理。也是EF上下文中非常重要一个属性。...状态为 Added 对象在 ObjectStateEntry 中没有原始。 Deleted 对象已从对象上下文中删除。 在保存更改后,对象状态更改为 Detached。...在不带更改跟踪代理 POCO 实体中,调用 DetectChanges 方法时,已修改属性状态更改为 Modified。 在保存更改后,对象状态更改为 Unchanged。...而且EF自动帮我们做了缓存处理,当我们第一次查询某个实体时它会自动帮我们从数据库取出数据,并装配成实体类交给我们开发人员,当第二次获取相同数据时,它会先从缓存中查找,如果已经存在数据了就立即返回,不会查询数据库...推荐方式二: 思路:无需先查出实体,因为我们知道EF通过ObjectStateManage来控制添加、修改、删除队列以及实体状态,我们所有可以通过在直接DTO转化成实体,然后实体对应队列中,并且我们手动实体状态处理好

78130

EF简介

一、当添加完EF实体之后: 1、系统会自动生成一个(对应ef模块名.content.tt文件),  这个模版是帮助我们生成ef访问上下文,里面有一个数据库实体,上面这个例子是TestEntities实体...二、使用ef进行数据库增删改差: ef实现增删改差流程:(1)通过把实体变化,转换成数据处理类(语句) (2)通过调用ADO.NET处理类(语句)转换成sql语句(3)sql语句插入到数据库中执行并返回结果...(4)ADO.NET数据库结果返回程序 通俗点说,就是ef帮助我们把实体变化翻译成sql语句,然后调用底层ADO.NET保存到数据库中去。...而里面的就是我们刚才所添加,说明在我们执行完数据库添加操作之后,数据库里面的数据马上将我们所添加数据马上映射给了当前实体对象,所以当我们在下面指定需要修改记录主键时,如果修改和添加共用同一个对象...3、当我们在操作完数据库对应表示表实体后,执行dbContext.SaveChanges()后,编译器报一个实体多个实体验证失败!

1.4K80

.NET ORM核心功能之导航属性- EFCore和 SqlSugar

导航属性 导航属性是作为.NET ORM核心功能中核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年SqlSugar重构已经拥有了一套 非常成熟导航属性体系...1.复杂查询过滤 用户根据权限过滤,用户根据组织过滤 等这种多对多情况用SQL就相当复杂 ,例如:用SQL写一个多对多过滤就要联3个表(主表 中间表 从表),如果 Where中用到多个多对多或者嵌套多对多那写...,特别在组织、用户、角色、文件等无处理不在,这也是为什么要用ORM原因 2.复杂表单提交 如果您的人事管理需要包含更多信息,例如学历和工作经验等字段,您可以在代码中添加相应实体和关联。...,特别是自增列用导航代码清爽很多 3.多层级结构查询 因为Sql本身就不支持对多层级结构查询,所以不用ORM想实现高性能多层级结构是需要花大量精力去优化和写代码 //EF CORE查询 var Persons...//可以排除多个 //IncludesAllFirstLayer("a","b") //自动导航如果有重复情况

37940

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

这是为了EF框架提供一个钩子,即方便模型到数据库映射,不理解就记住,后面的项目会详细讲解。 从上面三个类代码可以看到,红色标记是主键,而黄色就是外键。...5 什么是实体框架,什么是代码优先和数据上下文? 新建ASP.NET MVC5项目会自动包含对实体框架(EF引用。...模型对象属性如果设置为虚拟,可以EF提供一个指向C#类集钩子(hook),并未EF启用了一些特性,如高效修改跟踪机制(efficient change tracking mechanism)...该派生类具有一个或多个DbSet类型属性,类型DbSet中每一个T代表一个想要持久保存对象。...) { } 如果不配置具体连接,EF尝试连接SQL ServerLocalDB实例,并且查找与DbContext派生类名相同数据库。

4.7K40

初识ABP vNext(1):开篇计划&基础知识

ABP框架提供了一些接口和基类来标准化这些属性,并自动设置它们;并且ABP提供了一个可扩展审计日志系统,自动化根据约定记录审计日志,并提供配置来控制审计日志级别。...多租户(multi-tenancy technology) 多租户是一种软件架构技术,这种架构可以让多个租户共用相同系统,并且可以确保各租户间数据隔离性。...应用层: 表示层与领域层中介,编排业务对象执行特定应用程序任务,使用应用程序逻辑实现用例。 领域层: 包含业务对象以及业务规则,是应用程序核心。...对象(Value Object) 对象实体恰好相反,它不需要唯一标识,并且它不可以被改变。对象通常是用来度量和描述事物,当你只关注某个对象属性时,该对象便可以是一个对象。...这样一方面避免了多个对象混乱,另一方面也保证了数据完整性,不会出现AB操作成功了,CD操作失败了,导致数据库产生脏数据。 聚合根引用聚合根:通过ID。 聚合根引用实体:通过对象(导航属性)。

2.1K30

EF Core关系配置

导航属性 由一个属性可以访问到另外一种类型实体叫做导航属性 单向导航:不设置反向属性,然后配置时候WithMany()不设置参数即可。...变量,就是字符串拼接;字符串内插如果赋值FormattableString变量,编译器就会构造FormattableString对象。...执行SaveChanges()等方法时,EF Core将会把存储快照中实体的当前进行比较。...) 更新到数据库; “已删除”实体,SaveChanges() 从数据库删除; 查看实体状态: 使用DbContextEntry()方法来获得实体EF Core中跟踪信息对象EntityEntry...全局查询筛选器 全局查询筛选器:EF Core 会自动这个查询筛选器应用于涉及这个实体类型所有 LINQ 查询。

7910

01-EF Core笔记之创建模型

使用EF Core第一步是创建数据模型,模型建好,下班走早。EF Core本身已经设置了一系列约定来帮我们快速创建模型,例如表名、主键字段等,毕竟约定大于配置嘛。...EF实体框架,它实体会映射到关系型数据库中。所以通过关系型数据库表之间关系更容易理解实体关系。...):基类和子类不在同一个表中,子类中包含基类所有字段,目前EF Core不支持该模式 EF Core仅支持TPH模式,基类和子类数据存储在同一个表中。...),所以只需要实例化一次,并在多个模型中进行使用。...实体构造函数 EF Core支持实体具有有参构造函数,默认情况下,EF Core使用无参构造函数来实例化实体对象,如果发现实体类型具有有参构造函数,则优先使用有参构造函数。

3K20

初识ABP vNext(1):开篇计划&基础知识

ABP框架提供了一些接口和基类来标准化这些属性,并自动设置它们;并且ABP提供了一个可扩展审计日志系统,自动化根据约定记录审计日志,并提供配置来控制审计日志级别。...多租户(multi-tenancy technology) 多租户是一种软件架构技术,这种架构可以让多个租户共用相同系统,并且可以确保各租户间数据隔离性。...应用层: 表示层与领域层中介,编排业务对象执行特定应用程序任务,使用应用程序逻辑实现用例。 领域层: 包含业务对象以及业务规则,是应用程序核心。...对象(Value Object) 对象实体恰好相反,它不需要唯一标识,并且它不可以被改变。对象通常是用来度量和描述事物,当你只关注某个对象属性时,该对象便可以是一个对象。...这样一方面避免了多个对象混乱,另一方面也保证了数据完整性,不会出现AB操作成功了,CD操作失败了,导致数据库产生脏数据。 聚合根引用聚合根:通过ID。 聚合根引用实体:通过对象(导航属性)。

1.4K51

Entity Framework DataAnnotations

前言 DataAnnotation 特性由.NET 3.5中引进,.NET中类提供了一种添加验证方式。但是在EF中它又可以对映射关系进行控制,相比较Fluent API使用起来要简单一些。...下面列举实体模型中常用DataAnnotation特性: 1.KeyAttribute:对数据库中表主键设置 [Key] public int OrderID {...[NotMapped] public string PhotoPath { get; set; }  12.ComplexTypeAttribute:标记指定实体属性是一个对象作为另一个对象属性...,映射到数据库中则子对象表现为多个属性字段 [ComplexType] public class Name { public string FirstName { get; set...对于单实体端,默认是可为空,即为0关系,如果要设置为1关系,要使用 [Required]标签来进行标记。但对于一对一中关系主体与依赖对象确无法做更细节控制。

83030

领域驱动设计案例之领域层框架搭建

根据前面对领域驱动设计概念以及一些最佳实践理解,领域模型是系统最核心部分,我们还是采用前面销售订单例子,这个案例系统核心构建就从领域层开始。...1.Model中主要确定了领域对象,聚合与聚合根,关联关系等,我们这里采用EF Model First建模,你也可以采取Code First。如下图: ?...IRepository接口定义在领域层主要目的是:      1)领域层不应该直接依赖于仓储实现:如果领域层依赖于仓储实现,一是技术绑定太紧密,二是仓储要对领域对象作操作,会造成循环依赖。   ...定义IRepositoryContext接口主要目的是:因为我们采用持久化机制是EFEF是通过DBContext来管理数据操作事务,一般是针对单实体。...通常我们业务需要持久化整个聚合多个实体或通过领域服务或应用服务持久化多个聚合,多个实体或聚合在业务上需要保持一致性,为了达到这个目的,我们引入了工作单元模式与定义了仓储上下文,通过仓储上下文来管理操作多个实体多个聚合中实体

95170

金三银四面试:C#.NET面试题中高级篇5-Linq和EF

10.除了EF,列举出你知道ORM框架? 11.在哪些类型额项目中你会选择EF? 为什么? 12.请说明EF中映射实体对象几种状态? 1.EF(Entity Framework)是什么?...ORM指的是面向对象对象模型和关系型数据库数据结构之间互相转换。 (表实体跟表之间相互转换) ORM框架有很多,EF框架是ORM框架其中一种,是实现了ORM思想框架。...迭代显然是非线程安全,每次IEnumerable都会生成新IEnumerator,从而形成多个互相不影响迭代过程。 在迭代时,只能前进不能后退。新迭代不会记得之前迭代后任何变化。...12.请说明EF中映射实体对象几种状态? Detached:该实体未由上下文跟踪。...Unchanged:实体将由上下文跟踪并存在于数据库中,其属性与数据库中相同。 Added:实体将由上下文跟踪,但是在数据库中还不存在。

4K30

在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current

继续讨论EF中使用存储过程问题,这回着重讨论是为存储过程参数进行赋值问题。说得更加具体一点,是如何为实体映射Delete存储过程参数进行赋值问题。...一、EF存储过程参数赋值版本策略 和传统基于DataSetADO.NET类似,EF核心功能之一就是“状态追踪(State Tacking)”。...但是,由于Delete存储过程默认使用实体对象初始,即使你在删除之前为Contact对象LastUpdatedBy属性设置了新,该也不可能传入到存储过程中去。...在这种情况下要实现我们要求,只有一个办法:当前转化成初始,这样转变通过调用ObjectContextAcceptAllChanges方法可以实现。...具体来说,对于需要删除实体,现设定LastUpdatedBy属性,然后调用AcceptAllChanges方法,然后再调用ObjectStateManagerChangeObjectState方法状态设置

1.7K100

七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

本节将使用SQL Server和EF(Entity Framework)创建相关数据库及数据库访问层。 简述实体框架(EFEF是一种ORM工具,ORM表示对象关联映射。...通过编写代码数据库数据映射到面向对象数据,或反向操作。 ORM是一种能够自动完成这两种方式工具。EF是微软ORM工具。 什么是代码优先方法?...DbSet数据集是数据库方面的概念 ,指数据库中可以查询实体集合。当执行Linq 查询时,Dbset对象能够查询内部转换,并触发数据库。...同一时间可能会接收到多个,为了区分发送到所有为每个附加一个Key,这个Key在这里就是名称属性。 名称和 Id作用是否相同?...TryUpdateModel是函数参数与Employee对象保持相同,如果更新失败,ModelState.IsValid会设置为False。 客户端验证是什么?

5.2K100

UnitOfWork知多少

UOW本质 通过以上介绍,我们可以总结出实现UOW几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW跟踪到已变更对象保存到变更列表中 UOW借助事务一次性提交变更列表中所有更改...EFUOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体变化。当调用SaveChanges时,所有的更改通过事务一次性提交到数据库。...从代码中我们可以看出仅做了一次保存,新增加User、Customer、Address对象都成功持久化到了内存数据库中。从而证明EF Core是实现了Uow模式。...这样就形成了一条链:Uow->仓储-->聚合-->实体对象。即Uow负责管理仓储处理事务,仓储管理单一聚合,聚合又由实体对象组成。 下面我们就先来定义实体对象,这里我们使用层超类型。...Uow即可完成对多个仓储持久化操作。

2.3K81
领券