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

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

对于习惯使用 EF Core 和 关系数据开发者来说,这看起来似乎有些奇怪。获取 Issue 所有数据是没有必要且低效。为什么我们不直接执行一个SQL插入命令数据库,而不查询任何数据呢?...然而,它是领域驱动设计一个重要实践。 聚合和聚合根最佳实践 以下最佳实践确保实现上述原则。 只通过ID引用其他聚合 一个聚合应该只通过其他聚合ID引用聚合,这意味着你不能添加导航属性其他聚合。...用于 EF Core 和 关系型数据库 在 MongoDB 中,自然不适合有这样导航属性/集合。...(){/*反序列化或ORM 需要*/} } } Issue通过其构造函数参数,获得属性所需值,以此创建一个正确有效实体。...如果我们用 public 设置器声明所有的属性,就像上面的Issue属性例子,我们就不能在实体生命周期中强制保持其有效性和完整性。

2.9K30

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

导航属性 导航属性是作为.NET ORM核心功能中核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年SqlSugar重构已经拥有了一套 非常成熟导航属性体系...,本文不是重点讲SqlSugar而是重点讲导航属性作用,让更多写Sql人还未使用ORM的人了解ORM作用。....Include(z1 => z1.Education) .Include(z1 => z1.WorkExperience).ToList() EF Core导航属性配置 EF多对多 public class...原码下载: https://github.com/DotNetNext/SqlSugar 总结: .NET中无论是EF CORE还是SQLSUGAR 使用了导航属性都不再需要费心写繁琐SQL语句,只需简单地调用导航属性...让我们一起追随这份感动,选择使用导航属性,让编程旅途更加愉悦,让代码世界充满美好与便捷!

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

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

对于主键,默认情况下EF会检索实体有没有名为Id或者名+Id属性,如果有EF则认为这个属性是主键,否则会认为该类没有设置主键。EF检索主键类型是数字类型的话,会自动添加自增长约束。...对于其他属性EF会自动按照同名形式映射到数据表中。 对于外键,如果在里添加了引用类型,而这个引用类型也在EF上下文中,EF会把这种属性称为导航属性。...EF一旦在里检索到了导航属性,就会去寻找对应外键。EF会认为 属性名+Id或者名+Id 可能是外键属性,如果找到名称一致且类型与导航属性目标主键类型一致,则认为是外键。...同时如果在一方这边设置了集合类型导航属性,那么EF会自动到目标里寻找外键属性。 说完了一对一和一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....[InverseProperty("Author")] 用在集合类型属性上,表示该集合属性是与源哪一个导航属性相关。

2.6K21

Entity Framework Core 2.0 入门

可以在Context里面override这个Onconfiguring方法: 有一个错误, 应该是Server=localhost; (这里无需调用方法, 因为方法什么也没做)....在老版本ef里, migration历史表里面还保存着当时迁移快照, 创建迁移时候还需要与数据库打交道. 这就是我上面提到的如果团队使用ef和源码管理的话, 就会遇到这个非常令人头疼问题....插入关联数据有几种情况: 1.直接把要添加Model导航属性附上值就可以了, 这里Department不需要写外键....这时, 因为该数据是被context追踪, 所以只需在它导航属性添加新记录, 然后保存即可. 3.离线数据添加导航属性. 这时候就必须使用外键了. 预加载关联数据 Eager Loading....使用Select可以返回匿名, 里面可以自定义属性. 这个匿名只在方法内有效. 看下SQL: 可以看到SQL中只Select了匿名里面需要字段.

3.1K80

Entity Framework Core 2.0 入门

可以在Context里面override这个Onconfiguring方法: 有一个错误, 应该是Server=localhost; (这里无需调用方法, 因为方法什么也没做)....在老版本ef里, migration历史表里面还保存着当时迁移快照, 创建迁移时候还需要与数据库打交道. 这就是我上面提到的如果团队使用ef和源码管理的话, 就会遇到这个非常令人头疼问题....插入关联数据有几种情况: 1.直接把要添加Model导航属性附上值就可以了, 这里Department不需要写外键....这时, 因为该数据是被context追踪, 所以只需在它导航属性添加新记录, 然后保存即可. 3.离线数据添加导航属性. 这时候就必须使用外键了. 预加载关联数据 Eager Loading....使用Select可以返回匿名, 里面可以自定义属性. 这个匿名只在方法内有效. 看下SQL: 可以看到SQL中只Select了匿名里面需要字段.

3.5K140

EF Core 导航属性配置

所谓一对多就是其中多方上有一个属性或者列指向了另一个实体,而那个“一”那头则没有对应属性指向多方。 多对多是指两个实例各有一个集合属性指向对方,换句话说就是A有0多个B,B也有0多个A。...意思就是无法定义一对一关系中子/从属方 如何解决呢?之前在说时候,EF会根据导航属性自动生成一个外键,但是这一条在一对一这里就有点不太起作用了。...所以我们必须手动在导航属性一侧实体里配置外键,并用 HasForeignKey指定。(如果不使用Fluent API,也是需要在一端实体配置外键,另一端则不需要)。...,只需要设置导航属性关联即可。...在EF 6中 中间表可以仅存在于关系中,但是在EF Core3 还没有这个支持。也就是当前文章使用版本。 5. 附加 在EF外键约束中,导航属性是默认可空

3K20

EF Core增删改查

0.前言 到目前为止,我们看了一下如何声明EF Core初步使用,也整体看了下EF Core映射关系配置以及导航属性配置。 这一篇,我带大家分享一下,我在工作中需要EF Core用法。...EF Core 导航属性配置》中介绍配置)的话,需要在EF Core中应用配置,具体是: protected override void OnModelCreating(ModelBuilder modelBuilder...当然了,使用配置文件必然会导致项目的增多,而且大量重复可能会出现。当然了,如果考虑这个问题的话,可以试试写一个项目代码生成器哦,专门用来处理这些差不多。...不过如果有导航属性的话,在新增时候,EF Core会自动检索导航属性另一端是否需要新增到数据库中,如果需要新增的话,EF Core会自动标记为新增。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端外键是可空类型,并不会删除导航属性另一端元素只会设置外键指向为NULL,如果另一端外键是不可空,那么就会同时删除。

3K20

EF 约定介绍

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

1.6K100

Entity Framework 系统约定配置

EF中是以一种约定方式进行表、列同实体进行映射,与此同时为了提高最大灵活性EF中可以通过Fluent API和Data Annotations两种方式对映射进行灵活配置。...3.使用导航属性约束两个表之间关系,在从表数据中除了导航属性,推荐定义一个外键属性在从表数据中(如果不指定将默认生成一个“+”外键列;此外在主表中推荐定义一个集合从表属性用户导航...,当然这个属性不定义也可以正常生成外键关系但是不利于使用),具体规则:“+”或者“+”又或者“”,其属性名不区分大小写并且如果出现多种匹配按照先后顺序匹配...;如果不存在外键属性则外键关系注册为可选,否则注册为必选项并且此时将设置级联删除关系;如果在从表中有多个导航属性对应同一个数据那么需要使用fluent API或者Data Annotations进行手动配置...Entity Framework 手动定义约定  EF默认约定不是一成不变,我们可以选择移除和修改它,例如EF默认生成数据表时将数据复数形式作为表名,下面的代码就可以移除这个规则: using

81520

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

项目依赖 使用 Scaffold-DbContext 命令生成实体 手动创建实体 实体属性映射 列映射 主键映射 导航属性 创建数据库上下文 从数据库中查询 准备工作 准备工作包含两部分...实体属性 每一个实体都有一组属性EF Core 会将实体属性映射到数据库表中列。 表映射 对数据库表进行映射,使用 Table() Attribute。...导航(Navigation)属性是数据库表之间关系在实体体现。...设置好实体之间导航属性后,可以通过导航属性轻松查询关联实体数据。...在设置导航属性之前,首先需要理清楚医院和医生存在着怎样数量关系,医生是医院附属,一家医院下面会有多名医生,因此医院和医生之间是一对多关系。为了方便理解,下面只保留主键、外键和导航属性

2.4K10

EF性能之关联加载

但是,通过对EF学习,可以避免不必要性能损失。本篇只介绍关联实体加载相关知识,这在我之前文章中都有介绍。...我们已经了解EF关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载...(一)Lazy Loading使用是动态代理,默认情况下,如果POCO满足以下两个条件,EF就使用Lazy Loading: POCO是Public且不为Sealed。...导航属性标记为Virtual。 关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用。...Lazy Loading会生成大量sql,Eager Loading生成关联查询比较负责,Explicit Loading同Lazy Loading一样生成很多sql,但是有一些其他优点,比如:导航属性可以不用标注为

90820

jQuery 尺寸、位置操作

② 该方法有2个属性 left、top 。offset().top  用于获取距离文档顶部距离,offset().left 用于获取距离文档左侧距离。...② 该方法有2个属性 left、top。position().top 用于获取距离定位级顶部距离,position().left 用于获取距离定 位级左侧距离。 ③ 该方法只能获取。...案例:带有动画返回顶部 1.核心原理: 使用animate动画返回顶部 2.animate动画函数里面有个scrollTop 属性,可以设置位置 3.但是是元素做动画,因此 $(“body,html...案例: 品优购电梯导航(上) 1.当我们滚动到 今日推荐 模块,就让电梯导航显示出来2.点击电梯导航页面可以滚动到相应内容区域3.核心算法:因为电梯导航模块和内容区模块一一对应4.当我们点击电梯导航某个小模块...页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current名 if (flag) { $(".floor .w").each(function (i, ele) {

1.1K20

Python 常用模块学习

2、模块执行环境 模块是被导入,但模块也可以导入和使用其他模块,这些模块可以用Python或其它编程语言写成 模块可内含变量、函数以及来进行其工作,而函数和可以包含变量和其它元素 3、导入模块...,这意味着,所有来自模块属性仅在import语句执行后才能使用 模块就是名称空间 模块名称空间可以通过属性__dict__或dir(M)获取...datetime模块用来操作时间 datetime.date:表示日期。常用属性有year, month, day datetime.time:表示时间。...:输出当前平台使用行终止符,win下为"\t\n",Linux下为"\n" In [10]: os.linesep Out[10]: '\n' pardir:获取当前目录目录字符串名 In [11...更多os模块详细内容,请看这里 -->猛击这里 六、sys sys模块与os模块组成了Python系统相关工具集核心部分。

79020

Entity Framework 约定

例如我们上一小节中定义 Department,中没有名称为id属性,但是存在名称为名称+id属性***DepartmentId***,因此DepartmentId属性,将会被映射为自增长主键...如果一个中既没有id属性,也没有名+id属性,那么代码在运行时将会报错,因为EF没有找到符合要求字段创建主键。...EF中定义关系要使用到导航属性,通过导航属性可以定义多个模型之间关系。大部分情况下我们会将导航属性和外键属性结合在一起使用。...导航属性命名规则如下:导航属性名称+主体主键名称 或者 主体名+主键属性名称 或者 主体主键属性名。...简单说就是:一个复杂类型作为已存在对象属性EF会将复杂类型映射到已存在表中,已存在表包将包含这些列,而不是将复杂类型映射成另外单独一张表。

1.3K10

React路由

前端路由功能:让用户从一个视图(页面)导航另一个视图(页面) 前端路由是一套映射规则,在React中,是 URL路径 与 组件 对应关系 使用React路由简单来说,就是配置 路径和组件(配对)...就必须使用到路由 react-router 官网:react-router 路由基本使用 基本步骤 安装 yarn add react-router-dom react-router-dom这个包提供了三个核心组件...属性,将来会渲染成a标签href属性 Link组件无法实现导航高亮效果 NavLink组件,一个更特殊Link组件,可以用用于指定当前导航高亮 to属性,用于指定地址,会渲染成a标签href属性...activeClass: 用于指定高亮名,默认active exact: 精确匹配,表示必须精确匹配名才生效 Route path 说明 默认情况下,/能够匹配任意/开始路径 如果.../ 通过/home可以匹配Home组件 再通过/list匹配子组件 编程式导航 场景:点击登录按钮,登录成功后

1.9K20

TDesign 更新周报(2022年11月第1周)

#1689修复吸顶表头超出省略问题,issue#1639提高 dragSortOptions 优先级,以便组件自定义全部参数,tdesign-react#1556修复表格可编辑单元格验证错误不能被正常清除问题...: 修复下拉菜单可视无法完全受控问题 @uyarn (#1729)Checkbox: 修复Checkboxoptions 参数属性变化时未重新渲染问题 @uyarn (#1730)详情见:https...属性值 @k1nz (#1933)Slider: 修复 vertical 示例展示异常 (issue #1904) @pengYYYYY (#1918)CheckBox: 修复 readonly 属性没效果...@asbstty (#1651)Pagination: 透传selectProps 和 selectProps.popupProps 组件 Pagination,以便实现挂载节点等复杂场景需求, issue...提高 dragSortOptions 优先级,以便组件自定义全部参数,issue#1556 @chaishi (#1638)修复可编辑表格,行编辑,数据校验问题,issue#1514 @chaishi

1.6K20

jQuery特效 | 导航底部横线跟随鼠标缓动

导航跟随 - 实现 结构分析 在此功能当中,核心在于结构搭建,导航底部横线能够来回运动,那么该横线必然需要定位当前导航当中,因此可以确定如下结构代码 ?...样式处理 针对级元素进行相对定位设置,针对子级元素(横线)设置绝对定位,并且设置left和bottom值 针对每个导航元素进行样式设置,需要注意是,针对“当前”导航,需要给出不同于其他元素样式(...,属性属性值以“键值对”方式存在,如果需要进一步了解animate相关知识,可以在文章底部点击相关链接,查看相应文章。...在用户交互过程中,有可能会出现前一个动画还没有结束,新动画就开启了,为了防止这个问题,我们通常根据需求在动画效果前面添加“stop()”方法,用于清除掉当前动画。...offsetLeft 与 position()方法 offsetLeft是JavaScript原生方法,ele.offsetLeft中,ele表示具体元素,元素offsetLeft属性,表示该元素左侧与级元素距离

8.6K50

scrollIntoView()方法导致整个页面产生偏移

如果不知道 scrollIntoView 如果使用,我有篇文章专门写了 scrollIntoView 简单使用:scrollIntoView() 让元素进入可视区域 · Issue #167 但是现在有个问题就是...如下图所示,当我点击第9题时候,左侧第9题移动到视口中,但是整个页面包括导航栏都往上移动了,且无法在移回来,整个页面是没有滚动条。 ?...问题分析 这个时候唯一可能就是scrollIntoView()函数引起问题。 我之前怀疑是不是该函数给整个页面加了transform 属性导致整个页面往上偏移,通过查看css,发现没有。...(简单来说就是元素相对元素上边距离) 这段代码好理解,就是当前需要显示元素距离元素顶部距离,也就是滚动条滚动高度。...这段代码执行后,就可以让该元素到达元素顶部位置。 注意事项:offsetTop 不一定是相对于元素,如果有很多元素的话,它是相对于第一个定位元素

3.9K40

神奇选择器 :focus-within

:focus-within 冒泡性 这个属性有点类似 Javascript 事件冒泡,从可获焦元素开始一直冒泡根元素 html,都可以接收触发 :focus-within 事件,类似下面这个简单例子这样...我们无须去给获焦元素设置 :focus 伪,而是可以给需要元素设置,这样当元素获焦时,我可以一并控制它元素样式 核心思想用 CSS 代码表达出来大概是这样: <div class="g-container...可以在<em>父</em>节点获取元素获得焦点<em>的</em>特性,实现<em>的</em>TAB<em>导航</em>切换: ?...意思大概就是,当 input 类型标签使用了 placeholder <em>属性</em>有了默认占位<em>的</em>文字,会触发此伪<em>类</em>样式。...,利用 focus-within 便捷<em>的</em>实现离屏<em>导航</em>,可以说将这个<em>属性</em><em>的</em>功能发挥<em>的</em>淋漓尽致,这里我直接贴一个 codepen 上 Dannie Vinther 对这个效果<em>的</em>实现方案: ?

1.1K20

神奇选择器 `:focus-within`

:focus-within 冒泡性 这个属性有点类似 Javascript 事件冒泡,从可获焦元素开始一直冒泡根元素 html,都可以接收触发 :focus-within 事件,类似下面这个简单例子这样...我们无须去给获焦元素设置 :focus 伪,而是可以给需要元素设置,这样当元素获焦时,我可以一并控制它元素样式 核心思想用 CSS 代码表达出来大概是这样: <div class="g-container...纯CSS<em>的</em><em>导航</em>栏Tab切换方案 现在又多了一种方式,利用了 :focus-within 可以在<em>父</em>节点获取元素获得焦点<em>的</em>特性,实现<em>的</em>TAB<em>导航</em>切换: [focuswithintab] DEMO --...意思大概就是,当 input 类型标签使用了 placeholder <em>属性</em>有了默认占位<em>的</em>文字,会触发此伪<em>类</em>样式。...这个是其他很多文章都有提到过<em>的</em>一个功能,利用 focus-within 便捷<em>的</em>实现离屏<em>导航</em>,可以说将这个<em>属性</em><em>的</em>功能发挥<em>的</em>淋漓尽致,这里我直接贴一个 codepen 上 Dannie Vinther 对这个效果<em>的</em>实现方案

1.2K50
领券