前置 笔记:

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 ,尝试另外一种值对象的配置方式相关推荐

  1. Java11新特性(二)——JDK11绿色免安装版环境变量配置教程

    前言 在实际的工作环境中,因为资源有限,一个人在公司,不可能配备多台电脑,所以就不可能有多个环境,但是一个人可能存在于多个项目,例如:在公司里面,尤其在一个大型的国企里面,研发产品生产线有很多条,当研 ...

  2. asp.net core新特性(1):TagHelper

    进步,才是人应该有的现象.-- 雨果 今天开始,我就来说说asp.net core的新特性,今天就说说TagHelper标签助手.虽然学习.net,最有帮助的就是microsoft的官方说明文档了,里 ...

  3. ABP EF Core多数据库支持

    ABP官方Demo中提供了在EF Core中如何实现多数据库支持的例子,但Demo说明文档中对于要做哪些修改没做说明,所以本文在此做下说明. 首先要说明的是(我这边通过官方模板生成时输入的项目名称为T ...

  4. 【Java 8 新特性】Java Map getOrDefault() 示例 | Map获取值为空则取默认值

    @[TOC](Java Map getOrDefault() 示例 | Map获取值为空则取默认值) getOrDefault是java.util.Map的默认方法,在Java 8中被引入. getO ...

  5. 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 ...

  6. [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)

    一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...

  7. 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 ...

  8. EF Core 2.1路线图:视图、GROUP BY和惰性加载

    Entity Framework Core一直追随着初始Entity Framework的发展,并不断推陈出新.它首先推出的是对视图的支持,这听起来有些耸人听闻.在即将推出的EF Core 2.1之前 ...

  9. EF Core的学习之路01

    本文章是我听B站杨中科的所做的笔记 杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili 什么时ORM 1.说明:本课程需要你有数据库.S ...

  10. [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

最新文章

  1. jmeter操作数据库
  2. ADB Server 错误的解决办法
  3. 计算机导论中IEE是什么缩写,Proc.IEE是期刊吗?全称是什么
  4. MySQL笔记-查询进程列表(查客户端IP、使用的用户、当前状态、ID号、使用的库)及断开客户端连接
  5. 晚上:上课笔记,听完自己独立完成
  6. angular五大服务顺序_IATF16949五大工具介绍
  7. pycharm显示中间变量
  8. 老司机通过后视镜辨别车距 完爆倒车影像功能
  9. 2017-2021书单5周年 |读书总结、读书方法论、知识体系搭建、效率工具推荐系列文章(1)δ星 丨读书笔记与书单 notes...
  10. Bloodsucker ZOJ-3551 期望DP
  11. 一键查询自己名下所有微信账户
  12. 虚拟现实、增强现实与全息投影的区别
  13. Android开发中长度单位简介
  14. 开发也可以如此简单!华为云发布两款开发工具
  15. Linux Terminal 下工具栏显示设置
  16. 【2017秋季校园招聘笔经面经专题汇总】
  17. php 查询mysql数据库 打印_php 查询mysql数据库 打印
  18. 新能源板块又火了,如何把握投资机会?
  19. discuz3.2开启ssl实现https需要修改的几个地方
  20. 互联网公司招聘--阿里巴巴--运营专员--2016年笔试题

热门文章

  1. 使用mysql解决Excel换行统计问题
  2. python opencv 显示图片 灰度图片 合并图片 保存图片 纵向合并
  3. 读完这篇系列文章,前端offer手到擒来!!!
  4. linux tac命令_Linux tac命令入门
  5. 五、Sql Server 基础培训《进度5-数据类型(知识点+实际操作)》
  6. 【干货】PS超实用功能:美化照片
  7. 正心,修身,方能齐家,治国,平天下
  8. mysql交互式服务检测_MySQL innotop实时监测工具
  9. 【ImgtuUtil】路过图床基础 Java 工具类(支持登录、上传、删除图片等操作)
  10. 阿伯丁大学计算机科学硕士申请,又双叒有更多硕士专业可以一月入学了 | 阿伯丁大学2021年春季入学专业名单更新(2020年8月更新)...