首页 > 其他分享 >Net6 EfCore 值对象类型和从属实体类型

Net6 EfCore 值对象类型和从属实体类型

时间:2022-10-24 17:15:07浏览次数:87  
标签:set get builder 实体 EfCore 类型 Net6 public

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

想申请微软MVP,无奈只有博客园有贡献,今天加了一个现任的微软MVP,据他所说,目前微软MVP申请比以前严格,仅仅博客园分享微软知识是不够的,还得有过社区分享,视频制作,出书等,看样子,我的微软MVP梦是越来越远了。

1、值对象类型

在实际项目开发中,我们可能碰到诸如状态、类型等字段,在大多数设计时,一般都是设计成 int 类型,例如:订单状态 0:待支付 1:已支付 2:已取消

这样的设计不影响程序的执行,但代码的可读性比较差

在efcore中我们可以借助枚举来完成

    public class  GoodsOrder
    {
        public string orderId { get; set; } 
        public orderStatusEnum orderStatus { get; set; } 
    }

    public enum orderStatusEnum
    {
        待支付,已支付,已取消
    }

配置如下:

  public void Configure(EntityTypeBuilder<GoodsOrder> builder)
        {
            builder.ToTable("GoodsOrders");
            builder.HasKey(A => A.orderId);
            builder.Property(A => A.orderStatus).HasComment("订单状态 0:待支付 1:已支付  2:已取消"); 
        }

这样,在数据库中存储时是以整数类型进行存储的,如果想在数据库中直接存储中文:待支付、已支付、已取消,你可以这样修改配置

  builder.Property(A => A.orderStatus).HasMaxLength(10).IsUnicode(true).HasConversion<string>().HasComment("订单状态 0:待支付 1:已支付  2:已取消");

HasConversion<string> 意思是指将枚举存储为字符串  

IsUnicode 是指存储中文或日文等Unicode字符集

2、从属实体类型

EF Core 使你能够对只能出现在其他实体类型的导航属性上的实体类型进行建模。 它们称为“从属实体类型”。 包含从属实体类型的实体是其所有者。

从属实体本质上是所有者的一部分,没有它就不能存在,它们在概念上类似于聚合。 这意味着,根据定义,从属实体位于与所有者关系的从属关系中。

    public class shop
    {
        public long id { get; set; }
        public string shopName { get; set; }
        public Geo  Geo { get; set; }
    }

    public class Geo
    {
        public double lat { get; set; }
        public double lgt { get; set; }
    }

配置如下

    internal class shopConfig : IEntityTypeConfiguration<shop>
    {
        public void Configure(EntityTypeBuilder<shop> builder)
        {
            builder.ToTable("shops");
            builder.OwnsOne(A => A.Geo, B =>
            {
                B.Property(p => p.lat).HasColumnName("lat").HasComment("纬度");
                B.Property(p => p.lgt).HasColumnName("lgt").HasComment("经度");
            }); 

        }
    }

从属实体类型详细参考:https://learn.microsoft.com/zh-cn/ef/core/modeling/owned-entities

标签:set,get,builder,实体,EfCore,类型,Net6,public
From: https://www.cnblogs.com/chenwolong/p/16822075.html

相关文章

  • 强转Int类型
    强转Int类型在C#中有三种方法把其它类型转为整型,分别是int.Parse()、强制转换(int)和Convert.ToInt32()。1、int.Parse()方法该方法只能把字符型(string)转换为整型......
  • c枚举类型enum用法(java 枚举类型enum用法)
    C中的枚举类型有什么特点呢?我们利用C中的枚举类型定义了在扫描程序中的记号;为了避免涉及到特定实现语言(C)中表示记号的细节,就使用了正则表达式本身来表示记号如何使用java......
  • chap4 循环结构、chap6 回顾数据类型和表达式 第一小组 学习总结
    chap4循环结构第一小组学习总结一、内容梳理c语言循环结构是指根据某一条件判断重复执行的语句,核心内容为循环控制表达式,如果表达式为真,则继续执行;否则,循环结束。c语......
  • JavaScript语法注释&数据类型和JavaScript语法变量
    JavaScript语法注释&数据类型注释:1.单行注释://注释内容2.多行注释:/*注释内容*/数据类型:1.原始数据类型(基本数据类型)1.number:数字。整数/小数/NaN(not......
  • C# 配置EF接口报错:ObjectContent`1”类型未能序列化内容类型“application/json; char
    WebApi项目中,配置了EntityFramework,一顿LINQ操作后接口调试出现以下错误:{"Message":"出现错误。","ExceptionMessage":"“ObjectContent`1”类型未能序列化内容......
  • Typescript类型体操 - Fill
    题目中文Fill是javascript中常用的方法,现在让我实现类型版本的FillFill<T,N,Start?,End?>,正如你看到的那样,Fill接受四个泛型参数,其中T和N是必填参数,......
  • 网卡编辑类型
    学习网卡编辑得总结:nmtui,nmcli,nm-connection-editor图形化编辑需要在系统里面显示;(8条消息)nmcli命令详解_桂安俊@kylinOS的博客-CSDN博客_nmcli命令详解 --使用......
  • Typescript类型体操 - Chunk
    题目中文你知道lodash吗?lodash中有一个非常实用的方法Chunk,让我们实现它吧.Chunk<T,N>接受两个泛型参数,其中T是tuple类型,N是大于1的数字typeexp1=......
  • 嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?
    指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题。#include<stdio.h>intmain(){inta=0x1234;int......
  • C语言——自定义类型(结构体+枚举+联合)
    结构体基础知识结构是一些值的集合,这些值被称为成员变量;结构体可以存储不同类型的数据项,而数组中是存储相同类型数据项声明structtag{//struct是关键字,tag是结构体标签名......