CodeFirst.InitTables怎么实现,不能编辑列和删除列但是可以新增列呢 返回

SqlSugar 沟通中
8 161
  var typeBilder = db.DynamicBuilder().CreateClass("table1", new SugarTable(){});                  
  //可以循环添加列   
  typeBilder.CreateProperty("Id",typeof(int),new SugarColumn(){IsPrimaryKey=true,IsIdentity=true});   
  typeBilder.CreateProperty("Name", typeof(string), new SugarColumn() { /*属性说明下面有*/ });        
  typeBilder.WithCache(); 
  //缓存Key 表名+字段名称相加        
  //创建类   
  var type = typeBilder.BuilderType();            
  //创建表   
  db.CodeFirst.InitTables(type); 
  
  

new SugarTable()
{
    IsDisabledDelete = true,
    IsDisabledUpdateAll = true
}

使用这个后,既不能编辑、删除,也不能新增列

new SugarTable()
{
    IsDisabledDelete = true
}

new SugarColumn() {
    IsDisabledAlterColumn = true
}

这样好像也不能在使用  CodeFirst.InitTables 的时候阻止编辑列


有没有什么办法在使用CodeFirst.InitTables建表的时候,可以实现不能编辑和删除列,但是可以新增列呢



热忱回答8

  • fate sta fate sta VIP0
    1个月前
    new SugarTable()
    {
        IsDisabledDelete = true
    }

    这样就行了,禁止所有更新包括添加

    0 回复
  • fate sta fate sta VIP0
    1个月前

      typeBilder.WithCache();  去掉试试

    0 回复
  • fate sta fate sta VIP0
    1个月前

     IsDisabledAlterColumn = true 这个应该是有效的

    0 回复
  • fate sta fate sta VIP0
    1个月前

    如果还有问题,说具体是哪个数据库

    0 回复
  • uslinsen uslinsen VIP0
    1个月前
            
            // 示例方法
            public void Test3()
            {
                var typeBilder = db.DynamicBuilder().CreateClass("table1", new SugarTable()
                {
                    IsDisabledDelete = true
                });
    
                typeBilder.CreateProperty("Id", typeof(int), new SugarColumn() {
                    IsPrimaryKey = true, 
                    IsIdentity = true 
                });
                typeBilder.CreateProperty("Name", typeof(string), new SugarColumn() {
                    // 第二次执行Test3的时候,Length改为120
                    Length = 100
                });
                // 第二次执行Test3的时候取消注释
                //typeBilder.CreateProperty("Name1", typeof(string), new SugarColumn()
                //{
                //});
    
                //创建类
                var type = typeBilder.BuilderType();
                //创建表
                db.CodeFirst.InitTables(type);
            }
            
            // 这样写,第一次执行  Test3 的时候会创建,table1,及Id,Name两个字段
            // 当第二次取消注释后执行 Test3 ,Name 长度会变为 120,会新增Name1 字段
            
            // 我希望,第二次执行Test3 的时候,Name 的长度不变,达到执行InitTables函数的时候,除了第一次创建表之外,后面都只能新增字段,不能编辑和删除字段
            // 主要是在低代码里面,编辑表字段还是太危险了,希望不能编辑和删除
            
            // 我尝试过以下两种方法:
    new SugarTable()
    {
        IsDisabledDelete = true,
        IsDisabledUpdateAll = true
    }
            //  这种方法会导致新增列和编辑列都不生效,不满足需求
            
            
            // 下面这种方法,感觉  IsDisabledAlterColumn 没有生效,当动态实体中的Length变化之后,数据库里面Name字段的长度也会被修改
                typeBilder.CreateProperty("Name", typeof(string), new SugarColumn()
                {
                    Length = 120,
                    IsDisabledAlterColumn = true
                });
            
            // 数据库是用的是  SQL Server


    0 回复
  • fate sta fate sta VIP0
    1个月前

    sqlsugar升级到最新预览版本看看

    0 回复
  • fate sta fate sta VIP0
    1个月前

    SqlSugarCore 5.1.4.167-preview21


    动态建类建表最近加上去了

    0 回复
  • uslinsen uslinsen VIP0
    1个月前
    new SugarTable()
    {
        IsDisabledDelete = true
    }
     
    new SugarColumn() {
        IsDisabledAlterColumn = true
    }
    
    
    //  新版本用这两个属性配置配合可以实现,谢谢大佬指点



    0 回复