当前位置: 首页 > news >正文

网站开发的岗位及职责wordpress关键字链接

网站开发的岗位及职责,wordpress关键字链接,盐城网站建设费用,wordpress 响应式首页后端采用Abp框架#xff0c;当前最新版本是7.4.0。 数据库使用MySQL#xff0c;在执行数据库迁移时#xff0c;写在Domain层的Entity类上的注释通通都没有#xff0c;这样查看数据库字段的含义时#xff0c;就需要对照代码来看#xff0c;有些不方便。今天专门来解决这个…后端采用Abp框架当前最新版本是7.4.0。 数据库使用MySQL在执行数据库迁移时写在Domain层的Entity类上的注释通通都没有这样查看数据库字段的含义时就需要对照代码来看有些不方便。今天专门来解决这个问题。 还是一顿搜索发现了两个方案 abp 框架拓展mysql 迁移增加数据库表和列备注 EFcoreMySql 数据迁移的时候怎么给表结构加注释   上述两篇文章 第一篇重载 MySqlMigrationsSqlGenerator 来实现加注释但是字段注释是通过Description属性来获取的这样字段上就要注释和Description重复写两遍。 第二篇直接通过工具读取xml文档生成 HasComment相关代码每次都需要手动修改DbContext代码。 都不是特别完美所以结合一下看看。具体方案还是重载MySqlMigrationsSqlGenerator但是通过读取xml来获取信息。 首先是SqlGenerator /// summary /// 拓展迁移操作增加数据表和列备注 /// /summary public class MyMigrationsSqlGenerator : MySqlMigrationsSqlGenerator {public MyMigrationsSqlGenerator(MigrationsSqlGeneratorDependencies dependencies,IMigrationsAnnotationProvider migrationsAnnotations,ICommandBatchPreparer commandBatchPreparer,IMySqlOptions mySqlOptions): base(dependencies, commandBatchPreparer, mySqlOptions){}protected override void Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder){base.Generate(operation, model, builder);if (operation is CreateTableOperation || operation is AlterTableOperation)CreateTableComment(operation, model, builder);if (operation is AddColumnOperation || operation is AlterColumnOperation)CreateColumnComment(operation, model, builder);}/// summary/// 创建表注释/// /summary/// param nameoperation/param/// param namebuilder/paramprivate void CreateTableComment(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder){string tableName string.Empty;string description string.Empty;if (operation is AlterTableOperation){var t operation as AlterColumnOperation;tableName (operation as AlterTableOperation).Name;}if (operation is CreateTableOperation){var t operation as CreateTableOperation;var addColumnsOperation t.Columns;tableName t.Name;foreach (var item in addColumnsOperation){CreateColumnComment(item, model, builder);}}//description DbDescriptionHelper.GetDescription(tableName.Replace(jingdianConsts.DbTablePrefix, ));description GetDescription(tableName, null);if (tableName.IsNullOrWhiteSpace())throw new Exception(表名为空引起添加表注释异常.);var sqlHelper Dependencies.SqlGenerationHelper;builder.Append(ALTER TABLE ).Append(sqlHelper.DelimitIdentifier(tableName)).Append( COMMENT ).Append().Append(description).Append().AppendLine(sqlHelper.StatementTerminator).EndCommand();}/// summary/// 创建列注释/// /summary/// param nameoperation/param/// param namebuilder/paramprivate void CreateColumnComment(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder){//alter table a1log modify column UUID VARCHAR(26) comment 修改后的字段注释;string tableName string.Empty;string columnName string.Empty;string columnType string.Empty;string description string.Empty;if (operation is AlterColumnOperation){var t (operation as AlterColumnOperation);columnType t.ColumnType;}if (operation is AddColumnOperation){var t (operation as AddColumnOperation);columnType t.ColumnType;description GetDescription(tableName, columnName);}if (columnName.IsNullOrWhiteSpace() || tableName.IsNullOrWhiteSpace() || columnType.IsNullOrWhiteSpace())throw new Exception(列名为空或表名为空或列类型为空引起添加列注释异常. columnName / tableName / columnType);var sqlHelper Dependencies.SqlGenerationHelper;builder.Append(ALTER TABLE ).Append(sqlHelper.DelimitIdentifier(tableName)).Append( MODIFY COLUMN ).Append(columnName).Append( ).Append(columnType).Append( COMMENT ).Append().Append(description).Append().AppendLine(sqlHelper.StatementTerminator).EndCommand();}private string GetDescription(string tableName, string? columnName){var type TableCommentRegister.Types[tableName];if (type null){return string.Empty;}string xmlPath type.Module.Name.Replace(dll,xml);XmlDocument xml new XmlDocument();xml.Load(xmlPath);var classNode xml.SelectSingleNode(($//member[nameT:{type.FullName}]));if (classNode null){return string.Empty;}if (columnName null){return classNode.InnerText.Trim();}else{var propertyNode xml.SelectSingleNode(($//member[nameP:{type.FullName}.{columnName}]));if (propertyNode null){return string.Empty;}return propertyNode.InnerText.Trim();}} } 这里面有一个点生成Sql时只知道table name和column name一般情况下列名就是属性名可以不考虑但是表名和类名可能会有差异比如前后缀之类的。参考1中就是直接做替换我考虑还是做了一个静态字典对象把表名和类名做了一个映射具体如下 /// summary /// 数据表注册器 /// /summary public static class TableCommentRegister {public static Dictionarystring, Type Types { get; set; } new Dictionarystring, Type();/// summary/// 配置实体对应的数据表同时注册类型用于后续生成备注/// /summary/// typeparam nameT实体类型/typeparam/// param namebuilder/param/// param nametableName数据表名/parampublic static void ToTableWithCommentT(this EntityTypeBuilderT builder, string tableName) where T : class{builder.ToTable(tableName);Types.TryAdd(tableName, typeof(T));} } 然后在DbContext类中针对表的处理代码如下 builder.EntityCompany(b {string tableName Consts.DbTablePrefix Company;b.ToTableWithComment(tableName);b.ConfigureByConvention(); //auto configure for the base class props}); 就是把之前的 ToTable 改成 ToTableWithComment 就可以了。 最后需要修改DbSchemaMigrator类把SqlGenerator注册进去。这里我就简单粗暴的复制了一下DbContextFactory类。因为DbContextFactory代码注释则表明了其只是用于EF Core console commands在Abp的DbMigrator程序中不起作用。 DbSchemaMigrator类中Abp 脚手架代码应该是这样的 public async Task MigrateAsync() {/* We intentionally resolving the XiuYuanDbContext* from IServiceProvider (instead of directly injecting it)* to properly get the connection string of the current tenant in the* current scope.*/await _serviceProvider.GetRequiredServiceXiuYuanDbContext().Database.MigrateAsync(); } 修改如下 public async Task MigrateAsync() { await CreateDbContext() .Database.MigrateAsync(); }public xxxDbContext CreateDbContext() {xxxEfCoreEntityExtensionMappings.Configure();var configuration BuildConfiguration();var connection configuration.GetConnectionString(xxxConsts.DbSchema);var builder new DbContextOptionsBuilderxxxDbContext().UseMySql(connection, ServerVersion.AutoDetect(connection), o o.SchemaBehavior(MySqlSchemaBehavior.Ignore))// 注意这里的ReplaceService.ReplaceServiceIMigrationsSqlGenerator, MyMigrationsSqlGenerator();return new xxxDbContext(builder.Options); }private static IConfigurationRoot BuildConfiguration() {var builder new ConfigurationBuilder().AddJsonFile(appsettings.json, optional: false);return builder.Build(); } 至此所有基础性工作都完成了后面再添加领域模型时记得把ToTable改成ToTableWithComment即可。
http://www.w-s-a.com/news/226054/

相关文章:

  • 随州网站建设有限公司个人申请注册公司需要多少钱
  • 东莞做商城网站建设wordpress批量下载外链图片
  • 新网站建设运营年计划书仓山区建设局招标网站
  • 网站开发天津网站建设项目组织图
  • 网站开发认证考试石家庄高端网站开发
  • 网站建设第一步怎么弄站酷网页
  • 设备网站模板江西的赣州网站建设
  • 邯郸营销型网站国际招聘人才网
  • hexo wordpress 主题织梦网站优化教程
  • 网站建设方案及上海市建设协会网站
  • 轴承外贸网站怎么做南宁网站排名优化公司哪家好
  • 沈阳企业网站建站郴州优化公司
  • cctv5+手机在线直播观看seo关键词排名优化方法
  • 网站建设公司怎么谈单怎么开通微信小程序商店
  • 深圳做网站案例一个服务器可以备案几个网站
  • 网络营销策划名词解释泉州百度推广排名优化
  • 一键生成网站的软件互联网营销师是干什么
  • 网站后台管理水印怎么做手机优化设置
  • 哪个网站做图文素材多wordpress++优化
  • 建设网站就选用什么样的公司网站类型分类有哪些
  • 找平面设计师网站网站建设须知
  • 建设联结是不是正规网站wordpress 微博同步
  • 瑞安微网站建设广州推广
  • 做旅游宣传网站的流程图中国企业集成网电子商务
  • 开发商城网站开发成交功能网站
  • 网站建设公司专业公司排名搭建网站的企业
  • 网站建设难吗海南智能网站建设报价
  • 企业网站建设选题的依据及意义校园网站建设的论文
  • 网站版面设计方案水电维修在哪个网站上做推广好些
  • 邹平建设局官方网站企业宣传片广告公司