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请私信发邮箱
欧洲三国在上海联合举办旅游推荐会2022年12月5日,罗马尼亚总领事馆在匈牙利和希腊领事馆的协助下,于上海市汾阳路16号组织了一次招待会和一次钢琴独奏会,以纪念2023年罗马尼亚城市蒂米什瓦拉市与匈牙利的维斯普雷
张家界元宇宙送福利看阿凡达2可免费游武陵源三湘都市报新湖南客户端12月16日讯(通讯员邓道理全媒体记者丁鹏志)阿凡达太远,张家界很近。12月16日,值国际大片阿凡达2全球公映之际,电影取景地张家界武陵源景区(张家界国家森林
可控核聚变,终极能源咫尺天涯据说,前沿科学领域有则冷笑话,大意是可控核聚变技术永远都还有50年方能实现。事实似乎的确如此,早在20世纪50年代第一颗氢弹试验成功后,对可控核聚变的研究就已经开始。笔者年幼时所接
RISCV全球出货突破100亿个本田计划将广本奥德赛销往本土ArmNeoverseV系列服务器IP无法对华出口据金融时报当地时间周三报道,软银旗下的英国芯片技术公司Arm确认,由于美国和英国不会批准其技术出口许可,中国科技巨头阿里巴巴集团将
张家界国家森林公园多举措复苏旅游市场来源人民网湖南频道12月15日,江苏游客在张家界国家森林公园游玩。吴勇兵摄围绕三个转型,聚力三个创新,复苏旅游市场,着力打造世界级旅游景区。12月15日,在张家界武陵源风景名胜区和
虎豹家族又添新成员!东北虎豹国家公园监测到幼虎10只幼豹7只来源央视新闻客户端国家林草局今天(15日)发布,东北虎豹国家公园日前公布最新建设经验和创新成果,园内自然生态系统得到整体保护和修复,支撑保障体系逐步建立,野生东北虎东北豹种群数量稳
解决激素脸干燥缺水,你需要做的还很多解决激素脸干燥缺水,你需要做的还很多面部皮肤紧张,忽然染上激素脸,这样的朋友大多心理有些恐慌。因为激素脸的症状是有灼热感干燥感有吹弹可破的感觉,这三种感觉都会引起非常不适,所以容易
经常染发会致癌,这是真的吗?研究结果公布,看完就懂了染发,现今已成为家常便饭的存在,也是一种非常流行的潮流趋势,无论男女老少,都会通过染发的方式来改善个人形象。爱美之心人皆有之,在这个很多人都做出了这样的行为,只要你有需求,都能加入
彩绘贴片?清朝的美甲可不止这些!在看一些清宫的影视剧时,我们经常能看到后宫的妃嫔们戴着各式各样精美的指甲套。这种装饰品并非空穴来风的点缀,实际上,它真的存在于历史中,并在清朝宫廷里风靡一时。这张照片中的慈禧也戴着
作为汉室后裔的刘裕为何定国号为宋,而不是汉?前言国号不光是一个王朝的名称,还是其最具代表性的象征。新生政权的国号历来都被开国君主所重视,一个好的国号可以提升臣民对其的认同感和归属感,这种影响虽说看不见摸不着,但是实打实地存在
两万字三十图二十三问,搞定RocketMQ!基础1。为什么要使用消息队列呢?消息队列主要有三大用途,我们拿一个电商系统的下单举例解耦引入消息队列之前,下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据引入