应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

C动态创建类,动态创建表,支持多库的数据库维护方案

  简介
  本文主要介绍使用利用SqlSugar来实现多数据库的维护,动态建类CRUD,动态建表,全局过滤器,跨库查询等功能1、创建表
  SqlSugar支持了3种模式的建表(无实体建表、实体建表,实体特性建表),非常的灵活
  可以多个数据库MYSQLMSSQLORACLESQLITEPGSQL等用同一语法创建数据库,不需要考虑数据库的兼容性
  中间标准:
  string大文本
  5。1。3。44preview06推荐
  〔SugarColumn(ColumnDataTypeStaticConfig。CodeFirstBigString)〕
  string设置长度的字符串
  〔SugarColumn(Length10)〕
  publicstringFieldName{get;set;}
  int整数
  publicintFieldName{get;set;}
  short整数小
  publicshortFieldName{get;set;}
  long大数字
  publiclongFieldName{get;set;}
  bool真假
  publicboolFieldName{get;set;}
  decimal默认
  publicdecimalFieldName{get;set;}
  decimal自定义
  18,218,418,6这几种兼容性好
  〔SugarColumn(Length18,DecimalDigits2)〕
  publicdecimalFieldName{get;set;}
  DateTime时间
  publicDateTimeFieldName{get;set;}
  枚举(数据库存int)
  public枚举FieldName{get;set;}
  byte〔〕二进制
  publicbyte〔〕FileInfo{get;set;}
  建议:升级到SqlSugarCore5。1。3。46preview09及以上
  对多库支持了比较好
  SqlServer特殊配置:和他库不同一般选用Nvarchar,可以使用这个配置让他和其他数据库区分(其他库是varchar)
  DbTypeSqlSugar。DbType。SqlServer,
  ConnectionString字符串,
  IsAutoCloseConnectiontrue,
  MoreSettingsnewConnMoreSettings(){
  SqlServerCodeFirstNvarchartrue,
  }
  1。1通过特性建表
  我们可以通过创建实体来进行建表
  publicclassCodeFirstTable1
  {
  〔SugarColumn(IsIdentitytrue,IsPrimaryKeytrue)〕
  publicintId{get;set;}
  publicstringName{get;set;}
  ColumnDataType自定格式的情况length不要设置(想要多库兼容看4。2和9)
  〔SugarColumn(ColumnDataTypeNvarchar(255))〕
  publicstringText{get;set;}
  〔SugarColumn(IsNullabletrue)〕可以为NULL
  publicDateTimeCreateTime{get;set;}
  }
  创建单个表
  db。CodeFirst。SetStringDefaultLength(200)。InitTables(typeof(CodeFirstTable1));这样一个表就能成功创建了
  手动建多个表
  db。CodeFirst。SetStringDefaultLength(200)
  。InitTables(typeof(CodeFirstTable1),typeof(CodeFirstTable2));
  建表特性如下
  IsIdentity是否创建自增标识
  IsPrimaryKey是否创建主键标识
  ColumnName创建数据库字段的名称(默认取实体类属性名称)
  ColumnDataType
  创建数据库字段的类型
  用法1:varchar(20)不需要设置长度
  用法2:不设置该参数系统会根据C类型自动生成相应的数据库类型
  用法3:多库兼容可以用:看标题9
  IsIgnoreORM不处理该列
  ColumnDescription备注表注释(新版本支持XML文件)
  Length长度设成10会生成xxx类型(10),没括号的不设置
  IsNullable是否可以为null默为false
  DecimalDigits精度如decimal(18,2)length18,DecimalDigits2
  OracleSequenceName设置Oracle序列,设置后该列等同于自增列
  OldColumnName修改列名用,这样不会新增或者删除列
  IndexGroupNameList已弃用,新用法看文档4。3
  UniqueGroupNameList已弃用,新用法看文档4。3
  注意:有2个属性用处不同
  DefaultValue
  IsOnlyIgnoreInsert
  DefaultValue默认值用来建表设置字段默认值
  IsOnlyIgnoreInserttrue插入数据时取默认值
  很多情况需要2个一起使用
  如果只建表不插入数据用1个
  如果建表并且插入数据用2个
  名称描述
  2。2无特性建表
  如果我们的实体不需要加特性,那么我们可以通过特性方式建表
  SugarClientdbnewSqlSugarClient(newConnectionConfig()
  {
  DbTypeDbType。SqlServer,
  ConnectionStringConfig。ConnectionString3,
  InitKeyTypeInitKeyType。Attribute,
  IsAutoCloseConnectiontrue,
  ConfigureExternalServicesnewConfigureExternalServices()
  {
  EntityService(s,p)
  {
  如果是Order实体进行相关配置
  p。IfTable()
  。UpdateProperty(itit。id,it
  {
  it。IsIdentitytrue;
  it。IsPrimarykeytrue;
  })
  。UpdateProperty(itit。Name,it{
  it。Length100;
  it。IsNullabletrue;
  })
  。OneToOne(itit。Item,nameof(Order。ItemId));
  如果Custom实体进行相关配置
  p。IfTable()
  。UpdateProperty(itit。id,it
  {
  it。IsIdentitytrue;
  it。IsPrimarykeytrue;
  })
  。UpdateProperty(itit。Text,it{
  it。DataTypeStaticConfig。CodeFirstBigString;支持多库的MaxString用法
  })
  可以结合全局逻辑一起使用,下面的和上面的有冲突的话,下面会覆盖上面的
  统一设置nullable等于isnullabletrue
  低版本C看标题2。2
  if(p。IsPrimaryKeyfalsenewNullabilityInfoContext()
  。Create(c)。WriteStateisNullabilityState。Nullable)
  {
  p。IsNullabletrue;
  }
  }
  }
  });
  性能说明:
  EntityService相同实体只会执行一次性不需太操作
  1。3无实体建表
  功能与实体建类一模一样,如果使用SqlSugar中间标准可以支持多个数据库一套代码建表
  vartypedb。DynamicBuilder()。CreateClass(UnitEntityA,
  newSugarTable()
  {
  TableDescription表备注,
  DisabledUpdateAlltrue可以禁止更新只创建
  }
  )
  。CreateProperty(Id,typeof(int),newSugarColumn(){IsPrimaryKeytrue,IsIdentitytrue,ColumnDescription列备注})
  。CreateProperty(Name,typeof(string),newSugarColumn(){Length200,ColumnDescription列备注})
  。BuilderType();
  db。CodeFirst。InitTables(type);
  3、数据库维护
  SqlSugar有一套数据库维护API,并且能够很好的支持多种数据库,例如备份数据库等常用功能
  例1获取所有表
  vartablesdb。DbMaintenance。GetTableInfoList(false);true走缓存false不走缓存
  foreach(vartableintables)
  {
  Console。WriteLine(table。Description);输出表信息
  获取列信息
  varcolumnsdb。DbMaintenance。GetColumnInfosByTableName(表名,false);
  }
  例2
  db。DbMaintenance。IsAnyTable(tablename,false)验证表名是否缓存不走缓存
  所以API
  GetDataBaseList获取所有数据库名称List
  GetViewInfoList查询所有视图List
  GetTableInfoList获取所有表,查询所有的表(GetTableInfoList(是否缓存))List
  GetColumnInfosByTableName
  获取列根据表名,获取字段,字段信
  息GetColumnInfosByTableName(表名,是否缓存)
  List
  GetIsIdentities获取自增列List
  GetPrimaries获取主键List
  IsAnyTable表是否存在,判断表存不存在(IsAny(表名,是否缓存))bool
  IsAnyColumn列是否存在bool
  IsPrimaryKey主键是否存在bool
  IsIdentity自增是否存在bool
  IsAnyConstraint约束是否存在bool
  DropTable删除表bool
  TruncateTable清空表bool
  CreateTable
  看标题1。1,1。2,1。3
  bool
  AddColumn添加列bool
  UpdateColumn更新列bool
  AddPrimaryKey添加主键bool
  DropConstraint删除约束bool
  BackupDataBase备份库bool
  DropColumn删除列bool
  RenameColumn重命名列bool
  AddDefaultValue添加默认值bool
  AddTableRemark添加表描述,表注释bool
  AddColumnRemark添加列描述,表注释bool
  DeleteColumnRemark删除列描述,表注释bool
  RenameTable重命名表bool
  CreateIndex创建索引,唯一约束(唯一索引)bool
  IsAnyIndex索引是否存在bool
  GetIndexList获取所有索引
  GetProcList获取所有存储过程
  2、跨库支持
  可以自动识别在哪个库
  实体
  〔TenantAttribute(1)〕对应ConfigId
  publicclassC1Table
  {
  publicstringId{get;set;}
  }
  〔TenantAttribute(2)〕
  publicclassC2Table
  {
  publicstringId{get;set;}
  }
  查询
  通过ConfigId进行数据库区分
  vardbnewSqlSugarClient(newList()
  {
  这儿声名所有上下文都生效
  newConnectionConfig(){ConfigId0,DbTypeDbType。SqlServer,ConnectionString。。,IsAutoCloseConnectiontrue},
  newConnectionConfig(){ConfigId1,DbTypeDbType。MySql,ConnectionString。。,IsAutoCloseConnectiontrue}
  });
  自动跨库联表查询
  varquery5db。QueryableWithAttr()如果MySql和SqlServer自动支持同服务器的跨库联表查询
  。LeftJoin((o,cus)o。CustomIdcus。Id)多个条件用
  。LeftJoin((o,cus,oritem)o。Idoritem。OrderId)
  。Where(oo。Id1)
  。Select((o,cus,oritem)newViewOrder{Ido。Id,CustomNamecus。Name})
  。ToList();
  手动跨库联表查询,这种方式结合dblink可以跨服务器
  varquery5db。Queryable()。As(xxx。表名)
  。LeftJoin((o,cus)o。CustomIdcus。Id,yyyy。表名)
  。LeftJoin((o,cus,oritem)o。Idoritem。OrderId,zzzz。名表)
  。Where(oo。Id1)
  。Select((o,cus,oritem)newViewOrder{Ido。Id,CustomNamecus。Name})
  。ToList();
  插入
  db。InsertableWithAttr(list)。Execommand()
  更新
  db。UpdateableWithAttr(list)。Execommand()
  删除
  db。UpdateableWithAttr(list)。Execommand()
  只要实体配置了数据库,就不要考虑换库了,直接使用,并且支持事务3、过滤器
  SqlSugar支持了全新的过滤器,可以是接口,集成该接口的类都生效,支持多表查询
  db。QueryFilter
  。AddTableFilter(itit。IsDeletedfalse)IDeletedFilter是自定义接口,继承这个接口的实体有效
  。AddTableFilterIF(isAdmintfalse,itit。OrgId用户OrgId);ITenantFilter自定义接口
  用例1:单条语句清空,只影响当前语句
  db。Queryable()。ClearFilter()。ToList();所有过滤器都无效
  db。Queryable()。ClearFilter()。ToList();只有IDeletedFilter过滤器无效
  db。Queryable()。ClearFilterIDeletedFilter,ITenantFilter()。ToList();IDeletedFilterITenantFilter无效
  用例2:当前上下文清空,不会影响其他请求,只是当前请求清空
  db。QueryFilter。Clear();
  db。QueryFilter。Clear();
  用例3:清空并还原,不会影响其他请求,只是当前请求清空
  db。QueryFilter。ClearAndBackup();有多个重载ClearAndBackupT,T2();
  db。Queryable()。ToList();
  db。QueryFilter。Restore();还原过滤器(适合下面代码还需要过滤器情况)
  4、子查询升级
  1。ToList()可以直接查询一个对象
  2。First()可以直接查单个对象
  3。ToList(itit。Id)可以查List一个字段集合
  4。。SelectStringJoin(zz。Name,,)子查询将一列用逗号拼接成字符串
  varlistdb。Queryable()
  。Select(itnew
  {
  CustomIdit。CustomId,
  OrderIdit。Id,
  OrderNameit。Name,
  CustomListSqlFunc。Subqueryable()。Where(cc。Idit。CustomId)。ToList()
  })
  。ToList();
  5、自定义类型支持5。1自定义类型转换器
  下面只是讲解怎么定义转换器,ORM自带的功能就包含下面功能,只是用来讲解
  publicclassDictionaryConvert:ISugarDataConverter
  {
  publicSugarParameterParameterConverter(objectvalue,inti)
  {
  该功能ORM自带的IsJson就能实现这里只是用这个用例来给大家学习
  varnamemypi;
  varstrnewSerializeService()。SerializeObject(value);
  returnnewSugarParameter(name,str);
  }
  publicTQueryConverter(IDataRecorddr,inti)
  {
  打断点调试
  该功能ORM自带的IsJson就能实现这里只是用这个用例来给大家学习
  varstrdr。GetValue(i);
  returnnewSerializeService()。DeserializeObject(str);
  }
  }
  使用自定义转换器
  〔SugarColumn(ColumnDataTypevarchar(2000),SqlParameterDbTypetypeof(DictionaryConvert))〕
  publicDictionarystring,objectDcValue{get;set;}5。1。3。53preview08
  现有类型支持5。1json类型
  https:www。donet5。comHomeDoc?typeId12325。2枚举类型
  int存储:直接用就行了
  publicDbTypeDcValue{get;set;}
  string存储:高版本如下写法
  〔SugarColumn(ColumnDataTypevarchar(20),SqlParameterDbTypetypeof(EnumToStringConvert))〕
  publicDbTypeDcValue{get;set;}
  3。数据库独有类型支持
  看左边菜单【数据库特性】该菜单下面有SqlServer菜单或者MySql菜单等,针对不同数据库都有专门的介绍6、动态建类,CRUD
  如果用DataTable和字典去操作数据库,那么在多库兼容上是不够用的,很多实体功能不能用,比如过滤器和AOP等等
  SqlSugar支持了动态建类,来实现CRUD
  动态建类可以继承接口有重载vartypedb。DynamicBuilder()。CreateClass(table1,newSugarTable(){})。CreateProperty(Id,typeof(int),newSugarColumn(){IsPrimaryKeytrue,IsIdentitytrue})。CreateProperty(Name,typeof(string),newSugarColumn(){})。WithCache()缓存起来根据表名和字段名组合的KEY。BuilderType();db。CodeFirst。InitTables(type);varvaluedb。DynamicBuilder()。CreateObjectByType(type,newDictionarystring,object(){{Id,1},{Name,jack}});db。InsertableByObject(value)。ExecuteCommand();db。UpdateableByObject(value)。ExecuteCommand();db。DeleteableByObject(value)。ExecuteCommand();db。StorageableByObject(value)。ExecuteCommand();插入或者更新db。Queryableobject()。AsType(type)。Filter(type)。ToList();
  总结
  SqlSugar在2021年到2022年大量的开源应用使用了SqlSugar,带动了SqlSugar的快速发展,我这边要感谢大家
  Admin。NET通用管理平台
  ZrAdminNetCore后台
  管理Yi框架(RuoyiVue)
  SimpleAdmin(new)
  vbootnetmagic。net(Vue2。0)
  网关采集系统(Blazor)
  RuYiAdmin
  CoreShop商城
  Blog。Core
  YuebonCore
  企业级框架Furion
  WebFirst
  腾讯APIJSON。NET
  WaterCloud微服务
  ViperFamilyBucket应用框架通用后台
  SmartSqlWMS仓库管理系统a
  pevoloapiFytSoaCms
  开源项目地址:https:www。donet5。comHomeDoc?typeId1215

想要夏季造型更时尚,这些凉鞋值得拥有,摩登之中彰显优雅贵气作为时尚搭配三大件(上装、夏装、鞋子)之一,鞋子在每一季的造型打造和搭配中,有着举足轻重的地位。爱美的小仙女们,大家好。今天给大家带来几款适合夏季的凉鞋,想要夏季造型更时……碧海黑帆不是叙事驱动游戏,后续更新全部免费延期多时的《碧海黑帆》终于即将发售,该作总监日前接受采访透露了更多细节,本作不是叙事驱动的游戏,让玩家可以创造自己的故事。此外他还提到目前规划的更新都是免费的。在True……他是传奇设计大师!被Dior开除11年后,改造绝美老房再次惊前不久,《VOGUE》探访了海盗爷JohnGalliano的家。好家伙,大家马上赶来围观,这位把Dior带入全盛时期的传奇设计大师,家里怕不是比秀场还精彩!看过采访……2499起!号称最完美的天玑8100手机发布红米K50危险了正如小智所说,今年最抢眼的处理器不是高通骁龙8Gen1,也不是口碑比其更好的联发科天玑9000,反而是发哥定位稍低的天玑8100。它之所以抢眼是因为做到了类似当年高通神U骁龙8……StrategyAnalytics高通在智能手机蜂窝无线电收根据StrategyAnalyticsRF无线元件服务近期发布的研究报告《2021年智能手机射频收发器市场份额:毫米波驱动市场惊人增长》,高通在2021年通过5G毫米波在智能手……原神2021全年回顾!版本风向扑朔,这2个5星角色沦为策划弃前言:不同人心中有不同的哈姆雷特,原神亦如是。在运营近一年半后,我们可以大致将原神玩家分为三类:佛系玩家、本命玩家、数值核心玩家。按理说作为单机游戏,类PVP的游戏模式很容易让……缺手断脚,为何瓦妮莎要公布科比遗体修正图?小心思多赚上亿美元科比离开快2年的时间了,可是关于科比案的争议却还没有结束,特别是科比妻子瓦妮莎和洛杉矶警方那边的官司,瓦妮莎认为洛杉矶警方的人泄漏了科比的照片,给她和家人带来了巨大的伤害,要求……2021体育态度那些难忘的体育记忆视频加载中。。。告别2021,世界体坛有哪些时刻在你的脑海闪回这一年快若闪电的速度掠过赛道苏炳添跑出9秒83亚洲最好成绩武大靖短道速滑世界杯……原子吸收法检测水中总镍的步骤采用火焰原子吸收光谱法中的直接法测定城镇污水中的总镍,它的测定范围与仪器的特性有关,波长为2320nm时,测试范围为0。1mgL1。0mgL。其检测原理是将水样吸入火焰后被测元……旅游达人燕子,带大家游玩印度尼西亚库塔海滩库塔的海滩平坦、沙粒洁白、细腻,但是沙滩却不是它最吸引人的亮点,库塔的魅力,在于它得天独厚的海浪,而且是老少皆宜的海浪。在库塔月牙形的海湾中,两端非常适宜戏水和初学冲浪,而在中……饭店最干净的家常菜清蒸鱼排第一,炒土豆丝排第4,建议了解人不管走到哪一步,总得找点乐子,想一点办法。是的,美食就是我找的乐子,想的办法!小谈食刻和你一起认真对待吃下的食物!导读:老妈今年一直在饭馆工作,前些日子叮嘱我,说……何家劲穷到靠搬尸赚钱,因支持包拯被2度封杀,如今靠骂火出圈如果要说谁出演的展昭形象最深入人心?我想八零后和九零后观众应该有不一样的看法。九零后观众心目中最经典的展昭,应该是2000年周杰版《少年包青天》中,释小龙饰演的形象。……
室内暖烘烘,如何预防暖气病?您是否在日常生活中听说过暖气病?看到这个标题,再看看外面寒风呼啸的天气,您是否要疑问了,冬季不是应该预防寒邪入侵人体么,怎么还要小心热邪呢?我们通常讲的寒邪是自然界中的邪……12月份退休人员有四笔钱迎来发放,事退和企退都有份,一起看看2022年最后一个月终于到了,过完12月马上就是2023年了,而在这最后一个月,依然是好消息不断,将会有四笔钱迎来发放,不管是机关事业单位退休人员还是企业退休人员都能受益,大家……(财经行情)纽约金价8日上涨新华社芝加哥12月8日电(记者徐静)纽约商品交易所黄金期货市场交投最活跃的2023年2月黄金期价8日比前一交易日上涨3。5美元,收于每盎司1801。5美元,涨幅为0。19。……A股易会满表态零容忍打击证券违法活动,下周,行情并不简单?今天是9月17日星期六,中国股市的法定节假日,股民终于可以舒一口气,不用担心股市再跌了。也许,现在的股民只有期盼周末,才能不让自己亏损。本周,虽然股市只运行了四天,但是几……一分钟看天下潮商2022。12。09腾讯控股自10月低点股价涨幅超50市值重返3万亿港元12月9日下午,港股三大指数涨幅均扩大至2,腾讯控股股价创三个月新高。截至14时23分,腾讯控股报324。8港元股,涨……张继科和刘诗雯,回不去了2019年郑州国际乒联巡回赛总决赛上,刘诗雯和许昕以3比2战胜日本组合水谷隼和伊藤美诚、获得混双冠军。当四周的掌声如潮水一般汹涌时,坐在观众席的张继科看向刘诗雯的眼神里,……商业快评封面天天见封面新闻记者孟梅12月5日,奈雪的茶控股有限公司发布公告称,已签署对乐乐茶主体公司上海茶田餐饮管理有限公司的投资协议。投资事项完成后,奈雪的茶将持有目标公司43。64股本……小伙子连续熬夜看世界杯,支持的球队赢了,他的脸却瘫了钱江晚报小时新闻通讯员应晓燕陈燕萍2022年的世界杯足球赛正如火如荼地举行,今年23岁的小郑是铁杆球迷一个,最近场场不落地熬夜看球赛,结果把自己熬进了医院。他嘴歪眼……微信聊天,暴露了的秘密我们很多人都一样,微信日渐成为我们社交、工作、学习、认识世界的重要工具。微信不仅是我们身体的一部分,更是我们社交关系的一部分。不信你可以看看下面的几条微信社交经验,……健康的敌人健康的敌人饮食篇仅就饮食而言,素食占比例多的人健康且长寿,而肉食占比例多的人慢病发病率明显增高。这两点是经过无数流行病学数据验证过的。吃,有太过也有不及。好哪口不要……盛泰集团研究报告智造研发助力成长,稳抓中高端优质客户(报告出品方作者:海通证券,盛开,梁希,王天璐)1、公司概况:面料成衣一体化制造集团,收入稳步提升盛泰集团是一家具备核心生产技术的主要服务于国内外中高端品牌的纺织服装行业……汽车早报恒大汽车已交付324辆恒驰5特斯拉将于明年1月公布M证监会终止对比亚迪半导体发行注册程序证监会官网12月30日消息,2022年11月23日,比亚迪半导体股份有限公司和保荐机构中国国际金融股份有限公司提交了申请,主动要求撤回……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网