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

1、版本要求 

SqlSugarCore 5.1.4.141  及以上版本

2、功能说明

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

2.1 和一对一区别

1对1 : 是2个表

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

2.2 和Json字段区别

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

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

3、完整用例

表结构

image.png

代码

//插入
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 { get; set; }
        [SqlSugar.SugarColumn(IsOwnsOne =true)]
        public UnitAddressadfafa Address { get; set; } 
    }
}

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

4、技巧

4.1 切换DTO

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

var list3= db.Queryable<普通类>()
     .Select<DTO>().ToList();
     
   public class DTO
   {
      
        public int CustomerId { get; set; }
        public string Name { get; set; }
        [SqlSugar.SugarColumn(IsOwnsOne =true)]//标识
        public  Address Address { get; set; } 
    }


关闭
果糖网