动态创建类型时,字段属性怎么设置并简化 返回
有个table表,存储表信息,一个列名称表,存储表对应的列字段信息,想通过sqlsugar生成表结构(类似于低代码)
问题如图:CreateProperty这个方法的第二个参数需要传字段的类型,才能生成,这个怎么处理,每个字段类型可能都不一样

热忱回答(70)
-
fate sta VIP0
2周前var dt=db.Queryable<object>().AS(表名).Where("1=2").ToDataTable();
可以拿到类型和列名
0 回复 -
fry VIP0
2周前@fate sta:这个是想做成低代码,配置表和列,再生成表的形式
0 回复 -
fate sta VIP0
2周前你可以参考rezero.api做法。
0 回复 -
fate sta VIP0
2周前
0 回复 -
fry VIP0
2周前@fate sta:第一个问题解决了,还有一个问题,某个字段先定义成日期类型,生成了表,表里没有数据,后来又把字段改成int类型,再次生成表,数据库里的表字段类型没有改过来,还是日期类型
0 回复 -
fate sta VIP0
2周前你是SQLITE吧。SQLITE不支持修改表结构。
0 回复 -
fry VIP0
2周前@fate sta:mysql8.x
0 回复 -
fate sta VIP0
2周前Sqlite哪怕是 int也能存时间,或者字符串。只是名字。
0 回复 -
fate sta VIP0
2周前可以写个DEMO改了肯定能改的。
0 回复 -
fate sta VIP0
2周前
0 回复 -
fry VIP0
2周前


0 回复 -
fate sta VIP0
2周前不用给我看这个,你写2个类。sugartable 都指向一个表。
执行2次codefirst ,类型肯定会改。
0 回复 -
fate sta VIP0
2周前用代码去模拟。
0 回复 -
fate sta VIP0
2周前rezero.api就是用的动态类实现的。
0 回复 -
fate sta VIP0
2周前0 回复 -
fate sta VIP0
2周前你可以下载了体验一下。
0 回复 -
fry VIP0
2周前@fate sta:我不用这套,只可以参考
0 回复 -
fate sta VIP0
2周前我只让你看一下功能是OK的。因为我这用的这个动态类修改类型
0 回复 -
fate sta VIP0
2周前还有疑问需要提供DEMO。
0 回复 -
fate sta VIP0
2周前搞2个字段的动态类写一个可以重现你问题的DEMO
0 回复 -
fry VIP0
2周前@fate sta:源码仓库有吗?我看看
0 回复 -
fate sta VIP0
2周前0 回复 -
fate sta VIP0
2周前有时间看源码,不如花3分钟写一个DEMO
0 回复 -
fry VIP0
2周前0 回复 -
fate sta VIP0
2周前var db = DbHelper.GetNewDb(); //初始化 { var typeBilder = db.DynamicBuilder().CreateClass("table1", new SugarTable() { }); typeBilder.CreateProperty("Id", typeof(int), new SugarColumn() { IsPrimaryKey = true, IsIdentity = true }); typeBilder.CreateProperty("XX", typeof(string), new SugarColumn() { }); typeBilder.WithCache(); //缓存Key 表名+字段名称相加 //创建类 var type = typeBilder.BuilderType(); db.CodeFirst.InitTables(type); //建表属性API看迁移 } //清空WithCache db.Utilities.RemoveCacheByLikeKey<Type>("table1") //更新 { var typeBilder = db.DynamicBuilder().CreateClass("table1", new SugarTable() { }); typeBilder.CreateProperty("Id", typeof(int), new SugarColumn() { IsPrimaryKey = true, IsIdentity = true }); typeBilder.CreateProperty("X", typeof(DateTime), new SugarColumn() { }); typeBilder.WithCache(); //缓存Key 表名+字段名称相加 //创建类 var type = typeBilder.BuilderType(); db.CodeFirst.InitTables(type); //建表属性API看迁移 }写成这种硬编码的。空的DEMO ,用控制台自测,有问题发DEMO.
0 回复 -
fry VIP0
2周前@fate sta:我没有用缓存,是不是这个原因?
0 回复 -
fate sta VIP0
2周前@fry:直接复制我的代码自测。
0 回复 -
fate sta VIP0
2周前我给你的DEMO肯定是好的。
0 回复 -
fry VIP0
2周前@fate sta:字段名称不变,都是 "XX"
0 回复 -
fry VIP0
2周前@fate sta:加了一个字段,重新生成也没有生成字段
0 回复 -
fry VIP0
2周前@fate sta:修改字符串类型字段的长度,重新生成也没有成功
0 回复 -
fry VIP0
2周前@fate sta:字段配置了排序,为什么生成的表字段也没有按照排序来生成呢?

0 回复 -
fry VIP0
2周前另一个问题,生成的时候已经有基类了(里面有审计字段),动态添加的时候不走AOP,导致Id这些审计字段无法自动赋值

0 回复 -
fate sta VIP0
2周前一个一个解决。先把上面的测试了。
0 回复 -
fate sta VIP0
2周前X是我写错了。2个都是XX
0 回复 -
fry VIP0
1周前@fate sta:你给的那个是可以改的
0 回复 -
fry VIP0
1周前@fate sta:不用
db.Utilities.RemoveCacheByLikeKey<Type>("table1")和WithCache()可以吗?没有监控到对标的修改Sql,这个生成标的方法会不会打印Sql?
0 回复 -
fate sta VIP0
1周前不清楚你的代码。
按我的格式写个硬编码用例
0 回复 -
fate sta VIP0
1周前不要有任何封装
0 回复 -
fry VIP0
1周前


@fate sta:做了封装,多库的,有基类baseType,其他参数都一样,,第一次可以创建表,后面的读取数据,再创建表,字段类型没改,添加的字段没添加进去,(基类的字段没有使用
CreateProperty方法添加进去,只添加了业务字段)
0 回复 -
fry VIP0
1周前@fate sta:你的代码我试过是可以的,没有封装直接用ISugarClient
0 回复 -
fate sta VIP0
1周前你要让我找出问题,你就提供没有封装的能重现的DEMO。
重现你的问题
0 回复 -
fate sta VIP0
1周前你有什么特别的就加到我的代码里面去。
0 回复 -
fate sta VIP0
1周前让他能重现就行了
0 回复 -
fry VIP0
1周前@fate sta:问题找到了,我截个图你看看一下,table这个参数传null或者New一个新对象可以修改

这个问题原因找到了,IsDisabledUpdateAll配置成了True
另一个问题:字段的排序和添加的时候审计字段怎么处理?
0 回复 -
fate sta VIP0
1周前@fry:动态类按文档操作 支持AOP的
有什么问题吗。有问题 给出 写入 更新 删 除的代码。
0 回复 -
fry VIP0
1周前@fate sta:

这种写法不走Aop,断点没进去
主键Guid类型,手动赋值了,调试插进表数据了,没有Aop,出现这个错误
0 回复 -
fry VIP0
1周前@fate sta:Crud已经实现了Aop,还剩下那个字段排序的问题
0 回复 -
fate sta VIP0
1周前要用db.InsertableByObject(对象)插入,看一下文档用法
0 回复 -
fate sta VIP0
1周前InsertableByObject
0 回复 -
fry VIP0
1周前@fate sta:已经测试成功了,字段的排序问题看一下
0 回复 -
fate sta VIP0
1周前@fry:什么问题描述清楚
0 回复 -
fry VIP0
1周前@fate sta:
1:表的列设置了排序,生成的表字段没有按照排序来2:已经生成的表,调整字段顺序,再次生成,顺讯没有变
0 回复 -
fate sta VIP0
1周前SqlSugarCore 5.1.4.208-preview10
过五分钟后安装 ,这个只支持初始化。
0 回复 -
fry VIP0
1周前@fate sta:这个版本修改了什么?只能在第一次的时候设置顺序,后面调整了顺序也不变了对吗?
0 回复 -
天之涯 VIP0
1周前@fate sta:还有一个问题,比如,字段A类型是decimal类型,设置了长度18,精度6,生成了表,后来把A字段改成了字符串类型,重新生成表,由于设置了长度和精度,会报错
0 回复 -
fry VIP0
1周前@天之涯:是的,存在这个问题
0 回复 -
fate sta VIP0
1周前@天之涯:字符串不能设置精度。只能设置长度。
0 回复 -
fate sta VIP0
1周前@fry:只支持初始化,和手写类一个效果
0 回复 -
fry VIP0
1周前@fate sta:底层自动处理一下吧
0 回复 -
fry VIP0
1周前@fate sta:能在底层处理一下吗?
0 回复 -
fate sta VIP0
1周前@fry:目前用户只有创建的需求,暂时没有修改需求。 考虑性能等因素,后面用户需求大在开发。
0 回复 -
fry VIP0
1周前
@fate sta:这个问题你那边底层处理一下吧0 回复 -
fate sta VIP0
1周前@fry:提供具体用例能重现的
0 回复 -
fate sta VIP0
1周前如果是数据库本身的约束,我这边就不好处理。正常情况是支的修改的。
0 回复 -
fry VIP0
1周前@fate sta:dcimal小数,带精度的,改成字符串后提示错误,字符串不需要精度, 类似于,提示(18,2)格式不对
0 回复 -
fry VIP0
1周前@fate sta:你那边底层,如果是字符串类型,自动把精度改成0,防止出现这样的错误
0 回复 -
fate sta VIP0
1周前@fry:这个可以优化。
0 回复 -
fry VIP0
1周前@fate sta:你那边优化吗?目前是我这边手动处理的,也可以使用(最好是你在底层自动处理一下)
0 回复 -
fry VIP0
6天前@fate sta:底层是否已经优化?
0 回复