专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

郁亮重申短期市场筑底判断市场收缩过头会积蓄自发修复动能澎湃新闻记者计思敏8月31日,万科企业股份有限公司(000002。SZ)召开2022年中期业绩推介会。万科董事会主席郁亮,总裁首席执行官祝九胜,执行副总裁财务负责人韩慧华,执行副总NBA生涯场均2010有多难?历史仅18人做到,强如约基奇也未能达成对于在NBA效力的球员来说,能够做到整个职业生涯始终保持良好的状态,是一件非常不容易的事情。尤其是在职业生涯场均能够贡献出20分和10篮板的数据,就更是一件非常困难的事情,但是纵观原神果然是佛系游戏,任务狂魔遭遇危机,无奈进入黑暗时刻游戏中的笔杆王者,每日靠玩游戏过日子,玩网游也有20个年头,我有自己独特的见解,作为一个10年不脱坑的老玩家,如果文章写的有什么问题,请重喷!如果大家觉得好,请转发加点赞!非常感谢法甲大变天!8。86亿豪阵被掀翻,小球会反超巴黎,强势登顶积分榜说起法甲,经常看球的球迷都知道,他们长年在欧洲第五联赛和第六联赛之间来回徘徊,得益于最近一些年巴黎的大投入和欧冠稳定的成绩,法甲最近几年一直压住葡超和荷甲,位居欧洲五大联赛之列!巴陈兴跃网安人才缺口超百万,建议政产学研用资共育队伍共话网络安全随着数字经济的发展,网络安全已成为关系国家安全和发展以及广大人民群众切身利益的重大问题,而强大的网络安全技术产业实力更是保障我国网络空间安全的根本基石。在此背景下,如何郭艾伦续约或泡汤,辽篮海报更新5核心,弃卒保车,离队板上钉钉结束了回国之后的隔离观察期,中国男篮的队员们迎来了短暂的假期,从多方面的报道可以知道,队员们选择第一时间回家,与家人共度中秋佳节。对于郭艾伦和辽宁队来说,可能在中秋节之后,续约留队直屏曲面屏自由切换LG发布首款可弯曲OLED电视近日,LG新款OLED电视LX3正式发布,这款电视是一款采用曲度调节的42英寸OLED电视,并将在9月2日6日的柏林国际消费电子展上进行展出。LG官方表示,LGLX3用于家庭观影游惠普星14Pro高性能轻薄本,不仅颜值高性能也很强对于一名大学生来讲,笔记本应该可以算是他们进入大学最好的一份礼物,然而对于当代的大学生来讲,他们对于笔记本的要求还是要有更高的选择,不仅要颜值,还得要高性能和高屏幕素质,而惠普星1买手机就选大内存,这四款12512GB手机值得买,最低2299元起您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。在买手机的时候,很多人首先考虑的是处理器的性能,其实内存的大小也决定了手机的运行速度,在使DNF0802体验服更新机械七战神实验室,巨多活动等你来看0802国服体验服更新了新副本,机械七战神实验室以及备战实验室活动和一些其他活动,快跟着老樊一起看看都是什么吧。一机械七战神实验室二普通地下城更新新增噩梦难度(入场名望23259)原神EP公布硝彩盛放之光今日(8月2日),原神官方公布原神EP硝彩盛放之光,共三首音乐,分别为神狐的祝福(HakushinsLullaby)硝彩回忆(IslandofHanabi)以及永远的花火(Ling
英美澳太难申?来看看新西兰吧留学最重要的是什么?是选择适合自己的国家和专业,除了日常热门,竞争激烈的英美澳,近年来一个小众的留学国家正在变成热门新西兰。新西兰移民部长Michael最近公开表态,前段时间移民局唐山打人案最终审理,有人被判死刑或无期徒刑?你是想多了唐山打人案最终审理,有人被判死刑或无期徒刑?你是想多了6月10日唐山烧烤店打人事件震惊了全世界。大家看到打人视频后印象最深的是主犯陈继志的嚣张。光天化日之下,他公然性骚扰女性,遭到拿到明年入场券斯凯奇成为第六届进博会的首批签约展商图说去年的第四届进博会上,斯凯奇携颇具科技感的产品亮相进博舞台来源采访对象提供新民晚报讯(记者金旻矣)连续四年参加进博会,又获得了明年进博会的首批入场券。昨天,舒适科技公司斯凯奇S杜卡迪Monster推出SP版,车重减轻强化运动基因,悬挂及电控升级杜卡迪最近亮相了2023款车型。其中Monster车型在标准版和Monster版之外,迎来了第三个版本,也就是我们今天要聊的MonsterSP版本,下面我们一起来看看。Monste建国以来仅17年未参与武装冲突西媒盘点美国战争罪行史参考消息网9月16日报道西班牙起义报网站近日刊登题为美国及其战争罪行史的文章,作者是美国问题专家费尔南多M加西亚别尔萨。全文摘编如下凭借人为操纵的所谓反恐战争,自2001年以来,美为什么小孩会换牙?真知新坐标每个小朋友到了六七岁时都会开始换牙,原来的牙齿慢慢松动脱落,新的牙齿慢慢长出来,这是为什么呢?原来,每个人一生都有两副牙齿乳牙和恒牙。婴儿出生6个月后开始长出乳牙到了6岁起名字女孩2022免费,最可爱有气质的女孩名字现代年轻的父母们都有自己的想法,有各种各样的要求,可爱一点,潮流一点,时尚一点,那么要怎么样给孩子取一个时尚好听的名字呢?母亲对子女的爱是毋庸置疑的,在名字上也可以清晰地体现,而这4岁孩子抑郁背后,是家长忽视了这一点全文2498字,阅读约需2。5分钟民小生常听大家调侃小孩子能有什么烦恼?还真的有!而且不容小觑!民小生制图今天热搜上说的就是这样的事4岁孩子听到父母谈论家中变故,很担心,又不敢说出叶飞率部解放福建老家,回乡探母时,母亲问长官,你是谁1949年6月,叶飞率领10兵团浩浩荡荡进军福建,很快发起了福州漳厦等战役,他的部队也解放了自己的家乡南安市金淘镇。叶飞这一天,叶飞忙里偷闲,找到了福建省委负责人,向他诉说了心中的毅力号火星车正在火星上发现越来越多的有机物美国宇航局的恒心漫游车正在火星上探索一个长期干旱的河流三角洲,它已经看到了该地区充满有机物的迹象这种含碳分子被广泛认为是生命的组成部分。火星车在一个名为斯金纳岭的地区进行了测量和采(外代二线)纽约时装周TomFord品牌时装秀(外代二线)纽约时装周TomFord品牌时装秀9月14日,模特在美国纽约时装周上展示TomFord品牌的2023春夏新款时装。新华社美联9月14日,模特在美国纽约时装周上展示Tom
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网