Net6。0中实现自动生成代码
1、前言
生成代码NuGet包:XmSoft。CodeGenerator
该包将会自动生成代码,如:实体,仓储,服务,控制器及校验等文件。
控制器包含CRUD接口:创建,修改,删除,详情,列表。
参考:ORM框架采用SqlSugar框架生成
2、示例创建控制台应用输出项目名称自定义dotnetnewconsoleoXmSoft。AutoCode引入NuGetdotnetaddpackageXmSoft。CodeGeneratorappsettings。json配置代码命名空间及输出位置比如:{CodeHelperOptions:{ConnectConnectionString:Server127。0。0。1;Uidsa;Pwdxxxxxxx;Databasetest;Port3306;Charsetutf8;,ProviderName:MySql。Data。MySqlClient,NameSpace:{ModelsNamespace:XmSoft。Domain。Models,DomainName:XmSoft。Domain,DtoNamespace:XmSoft。ViewModels。Dto,ApiControllerNamespace:XmSoft。Api。Application,InterfaceName:XmSoft,ServicesNamespace:XmSoft。Service,RepositoriesNamespace:XmSoft。Repository,ValidatorNamespace:XmSoft。Validation},CodePath:{ModelsPath:XmSoft。DomainModels,DtoPath:XmSoft。ViewModelsDto,IRepositoriesPath:XmSoft。IRepository,IServicesPath:XmSoft。IService,RepositoriesPath:XmSoft。Repository,ServicesPath:XmSoft。Service,ControllerPath:XmSoft。ApiApplication,ValidatorPath:XmSoft。Validation}}}Utility。cs输入表名,多个用逗号隔开publicstaticclassUtility{publicstaticstring〔〕WriteTables(){Console。WriteLine(请输入数据表名称,多个用逗号隔开);varstrReadConsole。ReadLine();vartablesstrRead?。Split(,);if(string。IsNullOrEmpty(strRead)tablesnulltables。Length0){WriteTables();}returntables??Array。Emptystring();}}Program。csConsole。WriteLine(自动生成代码);varconfigurationnewConfigurationBuilder()。SetBasePath(Directory。GetCurrentDirectory())。AddJsonFile(appsettings。json)。Build();varoptionsconfiguration。GetSection(nameof(CodeHelperOptions))。GetCodeHelperOptions();varpathDirectory。GetCurrentDirectory();varfilterAXmSoft。AutoCodebinDebuget6。0;XmSoft。AutoCode修改创建的项目名varfilterBXmSoft。AutoCodebinReleaseet6。0;pathpath。Replace(filterA,);pathpath。Replace(filterB,);Console。WriteLine(34;{path});options。CodePath。ValidatorPathPath。Combine(path,options。CodePath。ValidatorPath);options。CodePath。ControllerPathPath。Combine(path,options。CodePath。ControllerPath);options。CodePath。ModelsPathPath。Combine(path,options。CodePath。ModelsPath);options。CodePath。IRepositoriesPathPath。Combine(path,options。CodePath。IRepositoriesPath);options。CodePath。IServicesPathPath。Combine(path,options。CodePath。IServicesPath);options。CodePath。RepositoriesPathPath。Combine(path,options。CodePath。RepositoriesPath);options。CodePath。ServicesPathPath。Combine(path,options。CodePath。ServicesPath);options。CodePath。DtoPathPath。Combine(path,options。CodePath。DtoPath);vartablesUtility。WriteTables();options。Tablestables;Console。WriteLine(是否确定执行(YN));varcommandConsole。ReadLine();if(!string。IsNullOrEmpty(command)command。ToLower()y){varhelpernewCodeGeneratorHelper(options);helper。Run();Console。WriteLine(完成);}Console。ReadKey();
3、执行ztest表sql语句DROPTABLEIFEXISTSztest;CREATETABLEztest(idbigint(20)NOTNULLAUTOINCREMENTCOMMENTid,businessidbigint(20)NULLDEFAULTNULLCOMMENT业务id,titlevarchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLDEFAULTNULLCOMMENT标题,contenttextCHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLCOMMENT内容,picturetextCHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLCOMMENT图片,statusint(11)NULLDEFAULTNULLCOMMENT状态0正常1关闭,remarkvarchar(200)CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLDEFAULTNULLCOMMENT备注说明,sortint(11)NULLDEFAULTNULLCOMMENT排序,createtimedatetime(0)NULLDEFAULTNULLCOMMENT创建时间,createbyvarchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLDEFAULTNULLCOMMENT创建Id,updatetimedatetime(0)NULLDEFAULTNULLCOMMENT更新时间,updatebyvarchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLDEFAULTNULLCOMMENT更新Id,delFlagchar(1)CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciNULLDEFAULTNULLCOMMENT是否删除1是,0否,PRIMARYKEY(id)USINGBTREE)ENGINEInnoDBAUTOINCREMENT4CHARACTERSETutf8mb4COLLATEutf8mb4unicodeciCOMMENT测试表ROWFORMATDynamic;SETFOREIGNKEYCHECKS1;补充说明:表必须有个主键key
执行生成实体summary测试表summary〔SugarTable(ztest)〕publicpartialclassTest:BaseBusinessEntityint?{summary标题summary〔SugarColumn(ColumnNametitle)〕publicstringTitle{get;set;}summary内容summary〔SugarColumn(ColumnNamecontent)〕publicstringContent{get;set;}summary图片summary〔SugarColumn(ColumnNamepicture)〕publicstringPicture{get;set;}summary状态0正常1关闭summary〔SugarColumn(ColumnNamestatus)〕publicint?Status{get;set;}summary备注说明summary〔SugarColumn(ColumnNameremark)〕publicstringRemark{get;set;}summary排序summary〔SugarColumn(ColumnNamesort)〕publicint?Sort{get;set;}}说明:自定义BaseBusinessEntity或BaseEntity自定义,这里的主键名id,业务idsummarysummarytypeparamnameTtypeparampublicabstractclassBaseBusinessEntityT:BaseEntityT{summary业务Idsummary〔SugarColumn(ColumnNamebusinessid)〕publiclong?BusinessId{get;set;}}publicabstractclassBaseEntityT{〔SugarColumn(IsPrimaryKeytrue,IsIdentitytrue,ColumnNameid)〕publicTId{get;set;}summary0未删除1回收站2已删除summary〔SugarColumn(ColumnNamedelFlag)〕〔JsonIgnore〕publicstringDelFlag{get;set;}summary创建时间summary〔SugarColumn(ColumnNamecreatetime)〕〔Column(createtime)〕〔JsonIgnore〕publicDateTime?CreateTime{get;set;}summary创建Idsummary〔SugarColumn(ColumnNamecreateby)〕〔Column(createid)〕〔JsonIgnore〕publicstringCreateBy{get;set;}summary修改时间summary〔SugarColumn(ColumnNameupdatetime)〕〔Column(updatetime)〕〔JsonIgnore〕publicDateTime?UpdateTime{get;set;}summary修改者IDsummary〔SugarColumn(ColumnNameupdateby)〕〔Column(updateid)〕〔JsonIgnore〕publicstringUpdateBy{get;set;}publicvoidCreate(){CreateBy(userId?。ToString())??CreateBy;BusinessIdbusinessId??BusinessId;CreateTimeDateTime。Now;DelFlag0;}publicvoidUpdate(){UpdateTimeDateTime。Now;}}生成仓储EFRepositoryTest引用XmSoft。Core。SqlSugar。RepositorypublicsealedclassTestRepository:EFRepositoryTest,ITestRepository{publicreadonlyISqlSugarClientContext;publicTestRepository(ISqlSugarClientcontext):base(context){Contextcontext;}publicISugarQueryableTestSugarQueryable(){returnContext。QueryableTest();}}生成服务引用XmSoft。Core。SqlSugar。ServicepublicclassTestService:BaseServiceTest,ITestService{publicTestService(ITestRepositoryrepository):base(repository){}publicasyncoverrideTaskIResultboolCreate(Testentity,dynamicuser){varvalidationnewAddTestValidator()。Validation(entity);if(!validation。Succeeded)returnvalidation。Failbool();entity。Create();entity。CreateByuser?。UserName;entity。BusinessIduser?。BusinessId;returnawaitbase。Create(entity);}publicasyncoverrideTaskIResultintUpdate(Testentity,dynamicuser){varvalidationnewUpdateTestValidator()。Validation(entity);if(!validation。Succeeded)returnvalidation。Failint();entity。Update();entity。UpdateByuser?。UserName;returnawaitbase。Update(entity);}publicasyncTaskIResultPageTestList(Testmodel,PageInfopager,dynamicuser){long?businessIduser?。BusinessId;varpredicateExpressionable。CreateTest();predicate。And(qq。BusinessIdbusinessId);varresultawaitPage(pager。PageIndex,pager。PageSize,predicate。ToExpression(),qq。CreateTime,false);returnresult;}}生成Dtosummary测试表summarypublicpartialclassTestDto{summaryidsummarypubliclongId{get;set;}summary业务idsummarypubliclong?BusinessId{get;set;}summary标题summarypublicstringTitle{get;set;}summary内容summarypublicstringContent{get;set;}summary图片summarypublicstringPicture{get;set;}summary状态0正常1关闭summarypublicint?Status{get;set;}summary备注说明summarypublicstringRemark{get;set;}summary排序summarypublicint?Sort{get;set;}}生成控制器BaseAppService可自定义可继承ControllerBase等summary测试表summary〔Route(test)〕〔Tags(测试表)〕publicclassTestAppService:BaseAppService{privatereadonlyITestServiceservice;publicTestAppService(ITestServiceservice){serviceservice;}summary创建测试表summaryparamnamemodelparamreturnsreturns〔HttpPost〕〔SwaggerResponse(200,Typetypeof(IResultbool))〕〔Log(Title测试表,BusinessTypeBusinessType。INSERT)〕publicIActionResultCreate(TestDtomodel)service。Create(model。AdaptTest(),User)。ApiResult();summary修改测试表summaryparamnamemodelparamreturnsreturns〔HttpPut〕〔SwaggerResponse(200,Typetypeof(IResultint))〕〔Log(Title测试表,BusinessTypeBusinessType。UPDATE)〕publicIActionResultUpdate(TestDtomodel)service。Update(model。AdaptTest(),User)。ApiResult();summary删除测试表summaryparamnameidparamreturnsreturns〔HttpDelete({id})〕〔SwaggerResponse(200,Typetypeof(IResultint))〕〔Log(Title测试表,BusinessTypeBusinessType。DELETE)〕publicIActionResultDelete(intid)service。Delete(qq。Idid)。ApiResult();summary获取测试表数据summaryparamnameidparamreturnsreturns〔HttpGet({id})〕〔SwaggerResponse(200,Typetypeof(IResultTest))〕publicIActionResultInfo(intid)service。Info(qq。Idid)。ApiResult();summary测试表列表summaryparamnamemodelparamparamnamepagerparamreturnsreturns〔HttpGet(list)〕〔SwaggerResponse(200,Typetypeof(IResultPageTest))〕publicIActionResultList(TestDtomodel,PageInfopager)service。List(model。AdaptTest(),pager,User)。ApiResult();}
Swagger显示效果注:需要Demo请私信发邮箱
爆大冷!拳坛纳达尔不敌1米97小将,33战全胜战绩被终结12月6日,在美国洛杉矶进行的一场12回合超次中量级比赛落下帷幕,经过36分钟鏖战,有着拳坛纳达尔著称的西班牙拳王塞尔吉奥加西亚以一致的判定输给了年仅23岁的美国新星塞巴斯蒂安……
玩家整合GTA4圣安地列斯罪恶都市地图无缝衔接《GTA》系列游戏为玩家们提供了庞大的开放世界,近日有Reddit网友发布了一张将《GTA4》、《圣安地列斯》、《罪恶都市》的地图整合在一起的超大型地图。这个概念最初源自于一个……
健脾祛湿化痰止咳!药中贤妻良母,百搭女王,你知道是什么吗经常有很多朋友问:怎么健脾啊??说起来健脾真的是有很多角度,比如:对肝气不舒、心情不好的人来说,舒肝解郁就是健脾,因为肝木克脾土嘛;对于严重缺乏运动的人来说,……
原神分享个底配刻晴满星阵容作者:NGAelecs刻晴2命,皇女6早柚1万叶0,123可以在90秒前后打完。武器:刻晴精3龙吟;皇女精1终末;早柚精1稻妻锻造大剑;万叶……
新疆人都不知道!穿越盘龙古道走过幸福五号桥就是梦里的杏花村幸福是一张旧报纸,陈旧的消息、褶皱的纸张、满是重叠的印刷文字,凑近依稀可以闻到墨印的气息,可是就是这样一张旧报纸,是熟悉也是温情:过去被文字记载,过往被墨迹铭刻,那些开心和不开……
有了糖尿病,不能吃土豆?土豆做成的土豆粉条能吃吗?作为一种最大众化的食物,土豆是不少人的最爱,但如果查出的糖尿病,一些人不得不忍痛割爱,对土豆敬而远之;但也有人照吃不误,对控制血糖并没有什么影响,为什么?难道是不同人的血糖对土……
火箭撞击月球马斯克的摊牌从1969年美国登月成功到挑战者航天飞机爆炸,美国再也没有能力载人航天,如果你认为这是美国所说的费用无法承担那就可笑至极了,现在国际空间站都是用俄罗斯的飞船往来一直到现在的马斯……
朋友圈伤心透顶的文案一、怕只怕这日复一日的陪伴,满腔全心全意的付出,还是会输,输给一种叫做新鲜感的玩意儿,你说,可笑不可笑。二、有些人莫名其妙的闯进你的世界,给了你想要的温暖和陪伴,然而又莫……
甄嬛传同为侧福晋,孟静娴却完胜浣碧,她的心机你看懂了吗你知道吗?《甄嬛传》中最有心机的女人其实不是甄嬛和皇后,而是久在深闺的孟静娴。今天,我们就来说一说孟静娴的心机到底有多深。01使计逃避选秀《甄嬛传》一开头就是皇上的……
乡村旅游热起来,有哪些新玩法?新京报贝壳财经讯(记者王真真)随着乡村振兴战略的推进,乡村旅游市场持续升温,越来越多的游客将目光转向乡村,去感受看得见的山水和触摸得到的田园。3月25日,途牛发布《202……
先别着急给视频号下定义图片来源视觉中国文新眸,作者叶静,编辑桑明强今年的微信公开课上,视频号站到了C位。这并不是腾讯第一次重金押注短视频。4年前,短视频热潮席卷互联网,抖音、快手各……
亚洲杯中国男篮险胜巴林的背后,藏着多少鲜为人知的秘密亚洲杯:中国男篮险胜巴林的背后,藏着多少鲜为人知的秘密。网友热议一针见血地指出:别拿主力缺失什么的当借口了,中国篮球难道也要发展成男足那种水平?就算拿CBA球队来打亚洲杯。也绝……