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

国外做网站被动收入中建卓越建设有限公司网站首页

国外做网站被动收入,中建卓越建设有限公司网站首页,营销型网站的推广方法,五屏网站建设价位后端采用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.huolong8.cn/news/299495/

相关文章:

  • 如何做网站不被坑企业国际网站建设
  • 牵牛建站紫搜做网站
  • 京东网站制作优点电子商务网站建设技巧
  • 企业网站建设的上市公司杭州网站外包公司
  • 网站运营方案书合肥专业做网站
  • 360网站seo手机优化软件四川省城乡住房和城乡建设厅网站首页
  • 加强廉政教育网站建设平面设计网站大全有哪些
  • 关于服装的网站规划与设计付费阅读小说网站开发建设源码
  • 宿迁网站建设哪家最好网站开发者工资
  • 做网站用虚拟主机怎么样滕州市 网站建设公司
  • 单页网站规划设计书郑州h5网站建设价格
  • 网站建设公司特色正规接单赚佣金的平台
  • 免费打开网站企业管理咨询服务合同
  • 建设股份公司网站通州富阳网站建设
  • 网站开发英语住房和建设厅网站
  • 重庆水务建设项目集团网站注册公司名称用什么名字好
  • linux wordpress建站教程上海 网站工作室
  • 设置网站人数政务网站建设需求
  • 建设银行的网站用户名是什么意思新网站建设平台
  • 给公司做网站多钱有什么好的建站公司
  • 做网站回答延安网站优化
  • 手机建行网站石家庄网站制作公司排名前十
  • 站长之家网页模板南昌seo方案
  • 深圳知名网站阿里网站建设
  • 网站流量与广告费网站开发的工作总结
  • 西安给公司做网站网页设计网站链接怎么做
  • 江苏模板网站建设利用wordpress的page
  • 上海华谊集团建设有限公司网站搞笑网站模板
  • 奉贤做网站价格广州黄埔做网站公司
  • dw做网站 后台用什么后台国外专名做路演的网站