DDD/ABP/EF Core :新特性Owned Entity Types ,尝试另外一种值对象的配置方式
前置 笔记:
DDD/ABP/EF Core 实现值对象Value Object_董厂长的博客-CSDN博客有一说一DDD真tM抽象 :https://blog.csdn.net/dongnihao/article/details/126650869?spm=1001.2014.3001.5501上述博客是实现值对象的通用方法。
深入理解看一下这个博客:
EFCore Owned Entity Types,彩蛋乎?鸡肋乎?之彩蛋篇 - 肥健 - 博客园
EFCore Owned Entity Types其实是一个倾向于 Code First 的功能,它就是为了从逻辑设计上,直接支持那种 实体A 包含(或者拥有) 实体B 的场景。
例如,某人拥有一些列的联系方式、或者某人拥有一系列的银行账号以及这些账号的余额,等等。。。
EF Core实现了一个新特性,owned entity type是EF Core 2.0的新特性。
至于什么是owned entity types,可以先把他理解为EF Core官方支持的值对象。
举个栗子:
《领域驱动设计》中的例子,address是一个经典的值对象。
官方文档上的定义,翻译过来就是:EF Core 定义在model中仅用于显示的其他实体类型Navigation properties被称为Owned Entity types,叫做自有实体,拥有自有实体的实体叫做拥有者。
自有实体 在EF Core不能使用惯例方式,可以在OnModelCreating方法中使用OwnsOne方法,或者使用声明属性(OwnedAttribute,EF Core 2.1以上版本支持)。
以下开始对比:
1.
// 通常来说,需要在配置文件下写明OwnsOne一个值对象
modelBuilder.Entity<Order>().OwnsOne(p => p.Address);
//或者使用这种方式
modelBuilder.Entity<Order>().OwnsOne(typeof(Address), "Address");
2. 新特性,另外一种方式
[Owned]
public class Address
{public string Street { get; set; }public string City { get; set; }
}
数据库
惯例情况是:Address属性在Order表中的名字是:Address_City和Address_Street,你也可以在OwnsOne方法中使用HasColumnName自定义列名,也可以存储到单独的表中,下面代码将地址存到单独表(orderAddress)中:
modelBuilder.Entity<Order>().OwnsOne(o => o.Address,sa =>{sa.ToTable("orderAddress");sa.Property(p => p.Street).HasColumnName("ToStreet");sa.Property(p => p.City).HasColumnName("ToCity");});
查询
跟普通的属性一样:
var order = context.Orders.FirstOrDefault(); Console.WriteLine($"TO: {order.ShippingAddress.City}");
限制摘抄自:
EF Core 新特性——Owned Entity Types - indexlang - 博客园
暂时不理解,这边先记录下
限制
- 不能生成自有对象的DbSet<T> 。
- 不能在ModelBuilder中使用自有对象的Entity<T>()。
即将实现:
- 自有对象不支持继承。
- 除非在单独的表中使用,否则自有对象不能为空。
- 多个拥有者不能使用同一个自有对象(废话)。
以前版本存在问题:
- EF Core 2.0中除非存在独立的表中,否则自有对象不能在派生实体类型中声明。
- EF Core 2.0和2.1只支持指向自有对象的reference navigations ,在2.2中移除这一限制。
加入思考
DDD/ABP/EF Core :新特性Owned Entity Types ,尝试另外一种值对象的配置方式相关推荐
- Java11新特性(二)——JDK11绿色免安装版环境变量配置教程
前言 在实际的工作环境中,因为资源有限,一个人在公司,不可能配备多台电脑,所以就不可能有多个环境,但是一个人可能存在于多个项目,例如:在公司里面,尤其在一个大型的国企里面,研发产品生产线有很多条,当研 ...
- asp.net core新特性(1):TagHelper
进步,才是人应该有的现象.-- 雨果 今天开始,我就来说说asp.net core的新特性,今天就说说TagHelper标签助手.虽然学习.net,最有帮助的就是microsoft的官方说明文档了,里 ...
- ABP EF Core多数据库支持
ABP官方Demo中提供了在EF Core中如何实现多数据库支持的例子,但Demo说明文档中对于要做哪些修改没做说明,所以本文在此做下说明. 首先要说明的是(我这边通过官方模板生成时输入的项目名称为T ...
- 【Java 8 新特性】Java Map getOrDefault() 示例 | Map获取值为空则取默认值
@[TOC](Java Map getOrDefault() 示例 | Map获取值为空则取默认值) getOrDefault是java.util.Map的默认方法,在Java 8中被引入. getO ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)
一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...
- Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布
Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...
- EF Core 2.1路线图:视图、GROUP BY和惰性加载
Entity Framework Core一直追随着初始Entity Framework的发展,并不断推陈出新.它首先推出的是对视图的支持,这听起来有些耸人听闻.在即将推出的EF Core 2.1之前 ...
- EF Core的学习之路01
本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...
- [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
最新文章
- jmeter操作数据库
- ADB Server 错误的解决办法
- 计算机导论中IEE是什么缩写,Proc.IEE是期刊吗?全称是什么
- MySQL笔记-查询进程列表(查客户端IP、使用的用户、当前状态、ID号、使用的库)及断开客户端连接
- 晚上:上课笔记,听完自己独立完成
- angular五大服务顺序_IATF16949五大工具介绍
- pycharm显示中间变量
- 老司机通过后视镜辨别车距 完爆倒车影像功能
- 2017-2021书单5周年 |读书总结、读书方法论、知识体系搭建、效率工具推荐系列文章(1)δ星 丨读书笔记与书单 notes...
- Bloodsucker ZOJ-3551 期望DP
- 一键查询自己名下所有微信账户
- 虚拟现实、增强现实与全息投影的区别
- Android开发中长度单位简介
- 开发也可以如此简单!华为云发布两款开发工具
- Linux Terminal 下工具栏显示设置
- 【2017秋季校园招聘笔经面经专题汇总】
- php 查询mysql数据库 打印_php 查询mysql数据库 打印
- 新能源板块又火了,如何把握投资机会?
- discuz3.2开启ssl实现https需要修改的几个地方
- 互联网公司招聘--阿里巴巴--运营专员--2016年笔试题
热门文章
- 使用mysql解决Excel换行统计问题
- python opencv 显示图片 灰度图片 合并图片 保存图片 纵向合并
- 读完这篇系列文章,前端offer手到擒来!!!
- linux tac命令_Linux tac命令入门
- 五、Sql Server 基础培训《进度5-数据类型(知识点+实际操作)》
- 【干货】PS超实用功能:美化照片
- 正心,修身,方能齐家,治国,平天下
- mysql交互式服务检测_MySQL innotop实时监测工具
- 【ImgtuUtil】路过图床基础 Java 工具类(支持登录、上传、删除图片等操作)
- 阿伯丁大学计算机科学硕士申请,又双叒有更多硕士专业可以一月入学了 | 阿伯丁大学2021年春季入学专业名单更新(2020年8月更新)...