DDD实战12 值对象不创建表,而是直接作为实体中的字段

这里的值对象如下风格:
namespace Order.Domain.PocoModels
{
//订单地址
//虽然是值对象 但是不继承ValueObject
//因为继承ValueObject会有Id属性 我们不为它创建独立建表不要Id
public partial class OrderAdress
{
public string Province { get; set; }
public string City { get; set; }
public string Zero { get; set; }
public string Street { get; set; }
}
}
namespace Order.Domain.PocoModels
{
//之所以把明细的总价作为一个单独的值对象,而不将其作为明细的一个属性
//是因为其中有逻辑,要通过产品数量乘以单个产品的P价格算出总价格
//不继承ValueObject
public partial class OrderItemTotalPrice
{
//明细总价
public decimal SubTotalPrice { get; set; }
}
}
using DDD.DomainBase;
using System;
using System.ComponentModel.DataAnnotations; namespace Order.Domain.PocoModels
{
//产品明细 实体
public partial class OrderItem : IEntity
{
[Key]
public Guid Id { get ; set; }
public string Code { get; set ; }
public OrderItemTotalPrice OrderItemTotalPrice { get; set; }
public OrderItemTotalPV OrderItemTotalPV { get; set; }
public ProductSKUs ProductSKUs { get; set; }
public int Count { get; set; }
}
}
关键的ef上下文如下:
using Microsoft.EntityFrameworkCore;
using Order.Domain.PocoModels; namespace Order.Domain
{
public class OrderEFCoreContext:DbContext,IOrderContext
{
public DbSet<Orders> Order { get; set; } public DbSet<OrderItem> OrderItem { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=localhost;Database=DDD1DB;User ID=sa;Password=0");
} /// <summary>
/// 这个重写的目的是
/// 将值对象 OrderAdress OrderTotalPrice OrderTotalPV 中的字段都放入到 Orders对应中的表中 不让其自己创建表
/// 将值对象 OrderItemTotalPrice OrderItemTotalPV ProductSKUs 中的字段都放入到OrderItem对应中的表中 不让其自己创建表
/// 如果没有这个重写 会报错 因为没有这个重写 会为每个值对象创建表,但是我们的值对象没有ID做主键
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderAdress);
modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderTotalPrice);
modelBuilder.Entity<Orders>().OwnsOne(p => p.OrderTotalPV); modelBuilder.Entity<OrderItem>().OwnsOne(p => p.OrderItemTotalPrice);
modelBuilder.Entity<OrderItem>().OwnsOne(p => p.OrderItemTotalPV);
modelBuilder.Entity<OrderItem>().OwnsOne(p => p.ProductSKUs);
}
}
}
DDD实战12 值对象不创建表,而是直接作为实体中的字段的更多相关文章
- Oracle创建表、索引、主键、字段描述
-- 创建表 create table SX04_LBALANCE ( YEAR VARCHAR2(10) not null, PROGRAMNO VARCHAR2(40) not null, FDA ...
- DDD实战与进阶 - 值对象
目录 DDD实战与进阶 - 值对象 概述 何为值对象 怎么运用值对象 来看一个例子 值对象的持久化 总结 DDD实战与进阶 - 值对象 概述 作为领域驱动设计战术模式中最为核心的一个部分-值对象.一直 ...
- 应用程序框架实战十六:DDD分层架构之值对象(介绍篇)
前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使用DDD分层架构,但你却从来没有使 ...
- 应用程序框架实战十七:DDD分层架构之值对象(层超类型篇)
上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好的实践.但是设计与实践的好与坏,对于不 ...
- DDD分层架构之值对象(介绍篇)
DDD分层架构之值对象(介绍篇) 前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使 ...
- DDD理论学习系列(7)-- 值对象
DDD理论学习系列--案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型.而在C#中,值类型的代表是strut和enum,引用类型的代表是class.interface.delega ...
- DDD 领域驱动设计-三个问题思考实体和值对象(续)
上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...
- DDD 领域驱动设计-三个问题思考实体和值对象
消息场景:用户 A 发送一个消息给用户 B,用户 B 回复一个消息给用户 A... 现有设计:消息设计为实体并为聚合根,发件人.收件人设计为值对象. 三个问题: 实体最重要的特性是什么? Messag ...
- DDD分层架构之值对象(层超类型篇)
DDD分层架构之值对象(层超类型篇) 上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好 ...
随机推荐
- swift项目第六天:中间发布按钮的封装以及监听点击事件
import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架, ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
- 翻译《虚幻引擎4艺术大师 - 蓝图 II 》 中文版
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/46504583 作者:ca ...
- 【u249】新斯诺克
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 斯诺克又称英式台球,是一种流行的台球运动.在球桌上,台面四角以及两长边中心位置各有一个球洞,使用的球分 ...
- Size Balanced Tree(SBT树)整理
不想用treap和Splay,那就用SB树把,哈哈,其实它一点也SB,厉害着呢. 先膜拜一下作者陈启峰.Orz 以下内容由我搜集整理得来. 一.BST及其局限性 二叉查找树(Binary Search ...
- (十二)RabbitMQ消息队列-性能测试
原文:(十二)RabbitMQ消息队列-性能测试 硬件配置 宿主机用的联想3850X6的服务器四颗E7-4850v3的处理器,DDR4内存,两块1.25TB的pcie固态.在宿主机上使用的事esxi5 ...
- Android学习笔记:Home Screen Widgets(2):关于Widget
通过widget定义,我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时,假设在appwidet-provider中定义了android:configure的ja ...
- ios开发网络学习五:输出流以及文件上传
一:输出流 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelega ...
- MinGW和MSYS项目是在一起的(翻译官网)
翻译MinGW官网的首页,首页描述了MinGW和MSYS的基本情况. Home of the MinGW and MSYS Projects(我才知道,MinGW和MSYS项目是在一起的 -_-!) ...
- linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定
背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况.一. linux ps命令,查看某进程cpu和内存占用率情况[root@test vhost]# ps auxUSER ...