SqlSugar能否反射数据库表动态生成类 返回

SqlSugar 处理完成
23 705

我的程序业务模型无法使用静态实体类操作数据库。因为需要给用户权限自定义业务模型,需要添加或删除列。

能否让SqlSugar根据用户定义的表自动生成相应的实体类,然后用特定方法匹配属性名称,给这个类赋值,再同步给数据库?


热忱回答23

  • 这个是支持的

    0 回复
  • https://www.donet5.com/Home/Doc?typeId=2562

    0 回复
  • https://www.donet5.com/Home/Doc?typeId=1203

    2个结合起来,一个读一个创建类

    0 回复
  • C#类型可能要手动mapping一下

    0 回复
  • 有个技巧可以通查询 where 1=1  的datatable拿到c#类型

    0 回复
  • @fate sta:好的,多谢。我试一下

    0 回复
  • @fate sta:这句没看懂,你指的是获取列的数据类型吗?

    0 回复
  • @咕噜噜:db.ado.getdatable("select * from table where 1=2") 这样可以获取C#类型

    0 回复
  • @fate sta:不好意思,原谅我愚钝。获取了datatable有什么用,将其转为类吗?网上查了一圈,将datatable转为list<T>类,好像跟我需求不大。我按照你说的第一种方法,已经创建了动态类,但在赋值时(

    var value= db.DynamicBuilder().CreateObjectByType(type,new Dictionary<stringobject>() { { "Id""1" }, { "Name""jack" } });

    )报错:Invalid cast from 'System.String' to 'SqlSugar.DbColumnInfo'.

    0 回复
  • Dt.Colulums能拿到每个列的类型

    0 回复
  • Invalid cast from 'System.String' to 'SqlSugar.DbColumnInfo'. 明你的类型有问题

    0 回复
  • C#Type应该是string

    0 回复
  • @fate sta:哦,我明白你的意思了。我用的columnInfo.GetType()获取的列类型,看来返回的是DbColumnInfo。还有一个属性DataType,不过返回的是string,也许也可以



    0 回复
  • DataType 是设置数据库类型 ,对应你读的DataType ,column是拿C#类型

    0 回复
  • @fate sta:确实如您所说,使用datatable直接给出C#类型,不用再把数据库类型转换了。多谢,问题应该可以解决

    0 回复
  • @fate sta:类是产生了,感觉用起来很麻烦啊。属性不是直接暴露出来的,还得用反射获取,赋值也得用反射。还不能直接绑定wpf。如果界面数据修改了,还得用方法,找到对象,才能给到数据库。感觉像个黑匣子

    0 回复
  • @咕噜噜:没听懂你说的东西,类是根据你表来的,缓存起来Type

    0 回复
  • 你的表改了就要以移除这个缓存

    0 回复
  • 另外还有缓存和清除缓存的方法

    0 回复
  • @fate sta比如,我用"db.DynamicBuilder().CreateObjectByType()"创建了这个类的实例,并把datatable中的值赋值给了这个对象。把这个object组成一个集合,绑定到wpf的gridview.itemsource,视图是显示不了数据的,也无法在wpf中直接修改数据并返回给对象。还不如直接用datatable转成list的同时,绑定list到wpf,修改值的时候,生成新的dictionary,再用动态对象插入或更新。也就是这个动态类实际上也就是便捷了数据库操作,不用拼凑sql语句了,但无法像普通类一样使用,无法被wpf控件直接绑定。

    0 回复
  • ToDatatable() 可以这样查询的

    0 回复
  • 和创建这个Type没有关系

    0 回复
  • db.QueryayableByObject(Type).ToDatatable()

    0 回复