.NET ORM 鉴别器

注意:

请升级到5.1.4.96-preview10+ 修复了联表查询中使用错误

鉴别器(Discrimator)

类似tdengine里面超级表概念, 他可以在一张表里面存储一个或者多个个性化字段,查询自动变成条件,并且插入更新都会自赋值进行存储

Discrimator ="Type:1"//字段名字可以随便取
Discrimator ="Type:1,Name:a" //可以多个字段,不要有空格等

用例

   [SugarTable("Animal",IsDisabledDelete =true)]//创建表禁止删除列必须加
    public class Animal
    {
        [SugarColumn(IsIdentity =true,IsPrimaryKey =true)]
        public int AnimalId { get; set; }
        public string Name { get; set; }
    } 
    [SugarTable("Animal",Discrimator ="Type:1", IsDisabledDelete = true)]//创建表禁止删除列必须加
    public class Dog : Animal
    {
        [SugarColumn(IsNullable =true)]//可空
        public int DogId { get; set; }
        [SugarColumn(IsNullable = true)]//可空
        public string Breed { get; set; }
    }
    [SugarTable("Animal", Discrimator = "Type:2", IsDisabledDelete = true)]//创建表禁止删除列必须加
    public class Cat : Animal
    {
        [SugarColumn(IsNullable = true)]//可空
        public int CatId { get; set; }
        [SugarColumn(IsNullable = true)]//可空
        public string Color { get; set; }
    }

创建表

 db.CodeFirst.InitTables<Animal,Dog, Cat>();//这个表包含所有字段,包括Type分类字段

查询和插入

  var dog = new Dog { Name = "Buddy", Breed = "Golden Retriever" };
  db.Insertable(dog).ExecuteCommand();
  
  
  var cat = new Cat { Name = "Whiskers", Color = "Gray" };
  db.Insertable(cat).ExecuteCommand();//实体类中没有Type字段会自插入特性对应的Type=2

  
   var catList=db.Queryable<Cat>().ToList();//自动加上条件Type=1
   var dogList = db.Queryable<Dog>().ToList();//自动加上条件Type=2

更新操作

直接更新就行了Type会忽略更新

导航对应用

在导航应用也可以用使,他的优势就是实体中不需要这个字段,而缺点就是需要创建多个类

var dis=db.Queryable<UnitTestDis<Cat>>()
                .Includes(x => x.Animals).ToList();//T是Cat那么就能导航Cat
                
var dis2 = db.Queryable<UnitTestDis<Dog>>()
               .Includes(x => x.Animals).ToList();//T是Dog那么就能导航Dog
               
                      
 [SugarTable("UnitTestDis")]//泛型需要设置表名
  public class UnitTestDis<T>
  {
        [SugarColumn(IsPrimaryKey =true,IsIdentity =true)]
        public int Id { get; set; }
        public int Aid { get; set; } 
        [Navigate(NavigateType.OneToMany,nameof(Animal.AnimalId),nameof(Aid))]
        public List<T> Animals { get; set; } 
  }


关闭
果糖网