首页
学习
活动
专区
工具
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.8K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

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

    3.1K30

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

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

    1.4K40

    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转化成实体,然后将实体对应的队列中,并且我们手动的将实体的状态处理好

    80930

    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") //自动导航如果有重复的情况

    59240

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

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

    4.8K40

    EF Core关系配置

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

    13010

    初始MyBatis(随笔1)

    JDBC代码和参数的手工设置以及结果集检索; MyBatis作为持久层框架,主要思想是将大量的sql语句抛离出来,配置在配置文件中, 实现了Sql 的灵活配置, 这样做的好处是将sql 与程序分离在不修改代码的情况下直接在配置文件中修改...--设置resultMap的自动映射级别,NONE(禁止自动匹配),PARTIAL(默认)自动匹配所有属性,有内部嵌套(association、collection)的除外 且 数据库列与实体类名相同,...typeAliases : 默认名称:指定包下JavaBean的非限定类名 environments:配置MyBatis多套运行环境,将sql映射到多个不同的数据库上,该元素节点下可以配置多个environment...复杂数据类型 eg: String int 或实体类..typeAliases 元素设置的别名映射; 对于许多Java内建类型大小写并不敏感; --> <!...… 测试类实现 核心接口和类 每个MyBatis 应用程序都以一个SqlSessionFactory 对象实例为核心; 可以根据 XML配置文件或 Configuration类的实例构建

    12810

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

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

    2.3K30

    01-EF Core笔记之创建模型

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

    3.1K20

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

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

    1.6K51

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

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

    5.3K100

    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]标签来进行标记。但对于一对一中的关系主体与依赖对象确无法做更细节的控制。

    85230

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

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

    1.8K100

    金三银四面试: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:实体将由上下文跟踪,但是在数据库中还不存在。

    4.2K30
    领券