1、前言 生成代码NuGet包:XmSoft。CodeGenerator 该包将会自动生成代码,如:实体,仓储,服务,控制器及校验等文件。 控制器包含CRUD接口:创建,修改,删除,详情,列表。 参考:ORM框架采用SqlSugar框架生成 2、示例创建控制台应用输出项目名称自定义dotnetnewconsoleoXmSoft。AutoCode引入NuGetdotnetaddpackageXmSoft。CodeGeneratorappsettings。json配置代码命名空间及输出位置比如:{CodeHelperOptions:{ConnectConnectionString:Server127。0。0。1;UPDPort3306;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。TConsole。WriteLine(是否确定执行(YN));varcommandConsole。ReadLine();if(!string。IsNullOrEmpty(command)command。ToLower()y){varhelpernewCodeGeneratorHelper(options);helper。Run();Console。WriteLine(完成);}Console。ReadKey(); 3、执行ztest表sql语句DROPTABLEIFEXISTSCREATETABLEztest(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测试表ROWFORMATDSETFOREIGNKEYCHECKS1;补充说明:表必须有个主键key 执行生成实体summary测试表summary〔SugarTable(ztest)〕publicpartialclassTest:BaseBusinessEntityint?{summary标题summary〔SugarColumn(ColumnNametitle)〕publicstringTitle{}summary内容summary〔SugarColumn(ColumnNamecontent)〕publicstringContent{}summary图片summary〔SugarColumn(ColumnNamepicture)〕publicstringPicture{}summary状态0正常1关闭summary〔SugarColumn(ColumnNamestatus)〕publicint?Status{}summary备注说明summary〔SugarColumn(ColumnNameremark)〕publicstringRemark{}summary排序summary〔SugarColumn(ColumnNamesort)〕publicint?Sort{}}说明:自定义BaseBusinessEntity或BaseEntity自定义,这里的主键名id,业务idsummarysummarytypeparamnameTtypeparampublicabstractclassBaseBusinessEntityT:BaseEntityT{summary业务Idsummary〔SugarColumn(ColumnNamebusinessid)〕publiclong?BusinessId{}}publicabstractclassBaseEntityT{〔SugarColumn(IsPrimaryKeytrue,IsIdentitytrue,ColumnNameid)〕publicTId{}summary0未删除1回收站2已删除summary〔SugarColumn(ColumnNamedelFlag)〕〔JsonIgnore〕publicstringDelFlag{}summary创建时间summary〔SugarColumn(ColumnNamecreatetime)〕〔Column(createtime)〕〔JsonIgnore〕publicDateTime?CreateTime{}summary创建Idsummary〔SugarColumn(ColumnNamecreateby)〕〔Column(createid)〕〔JsonIgnore〕publicstringCreateBy{}summary修改时间summary〔SugarColumn(ColumnNameupdatetime)〕〔Column(updatetime)〕〔JsonIgnore〕publicDateTime?UpdateTime{}summary修改者IDsummary〔SugarColumn(ColumnNameupdateby)〕〔Column(updateid)〕〔JsonIgnore〕publicstringUpdateBy{}publicvoidCreate(){CreateBy(userId?。ToString())??CreateBy;BusinessIdbusinessId??BusinessId;CreateTimeDateTime。NDelFlag0;}publicvoidUpdate(){UpdateTimeDateTime。N}}生成仓储EFRepositoryTest引用XmSoft。Core。SqlSugar。RepositorypublicsealedclassTestRepository:EFRepositoryTest,ITestRepository{publicreadonlyISqlSugarClientCpublicTestRepository(ISqlSugarClientcontext):base(context){C}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?。UserNentity。BusinessIduser?。BusinessId;returnawaitbase。Create(entity);}publicasyncoverrideTaskIResultintUpdate(Testentity,dynamicuser){varvalidationnewUpdateTestValidator()。Validation(entity);if(!validation。Succeeded)returnvalidation。Failint();entity。Update();entity。UpdateByuser?。UserNreturnawaitbase。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);}}生成Dtosummary测试表summarypublicpartialclassTestDto{summaryidsummarypubliclongId{}summary业务idsummarypubliclong?BusinessId{}summary标题summarypublicstringTitle{}summary内容summarypublicstringContent{}summary图片summarypublicstringPicture{}summary状态0正常1关闭summarypublicint?Status{}summary备注说明summarypublicstringRemark{}summary排序summarypublicint?Sort{}}生成控制器BaseAppService可自定义可继承ControllerBase等summary测试表summary〔Route(test)〕〔Tags(测试表)〕publicclassTestAppService:BaseAppService{privatereadonlyITestSpublicTestAppService(ITestServiceservice){}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请私信发邮箱