.NET中使用Value object 【 值对象 VO 】

1、版本要求 

SqlSugarCore 5.1.4.141  及以上版本

2、功能说明

表是一维的 实体用 二维的来表现

2.1 和一对一区别

1对1 : 是2个表

值对象 :是1个表,只是将一个表的部分字段用对象包起来

2.2 和Json字段区别

json存类:  一个字段存储多个字段

值对象:  存储的是多个字段,但是接收的是一个对象

3、完整用例

表结构

image.png

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//插入
db.Insertable(new UnitCustomeradfafas()
{
        CustomerId=1,
        Name="name",
        Address=new UnitAddressadfafa()
        {
            City="city",
                Street= "street",
                ZipCode= "zipCode"
        }
                   
}).ExecuteCommand();
//更新
db.Updateable(new UnitCustomeradfafas()
{
    CustomerId = 1,
    Name = "name2",
    Address = new UnitAddressadfafa()
    {
        City = "city2",
        Street = "street2",
        ZipCode = "zipCode2"
    }
 
}).ExecuteCommand();
//查询
var list=db.Queryable<UnitCustomeradfafas>().ToList();
//条件查询
var list2 = db.Queryable<UnitCustomeradfafas>()
    .Where(it=>it.Address.City== "city2")
    .Select(it=>new {
        Street = it.Address.Street
    }).ToList();
 
            
  
    public class UnitAddressadfafa
    {
        //支持SugarColumn设置别名
        public string Street { get;   set; }
        public string City { get;   set; }
        public string ZipCode { get;   set; }
          
    }
    public class UnitCustomeradfafas
    {
        [SqlSugar.SugarColumn(IsPrimaryKey =true)]
        public int CustomerId { get;   set; }
        public string Name { getset; }
        [SqlSugar.SugarColumn(IsOwnsOne =true)]
        public UnitAddressadfafa Address { getset; } 
    }
}

说明:虽然实体是2维的,但是对应的表是一维的

4、技巧

4.1 切换DTO

有的时候我们只需要查询是二维的,插入和更新还是一维的 ,我们可以使用下面写法

1
2
3
4
5
6
7
8
9
10
11
var list3= db.Queryable<普通类>()
     .Select<DTO>().ToList();
      
   public class DTO
   {
       
        public int CustomerId { getset; }
        public string Name { getset; }
        [SqlSugar.SugarColumn(IsOwnsOne =true)]//标识
        public  Address Address { getset; } 
    }


关闭
果糖网