Skip to content

定义新接口IEntityBatchConfiguration,用于接管实体注册时的批量配置 #212

@gmf520

Description

@gmf520

您的功能请求与现有问题有关吗?请描述

实体注册时,有些实体配置或者实体属性配置的需求比较统一,例如:

  • 所有实体添加一定规范的表前缀
  • 所有实体的DateTime属性希望在存数据库时转换为UTC时间
  • 希望生成数据库时将属性注释添加到表字段的描述信息中
  • 其他的一些需求
    如果逐个写代码配置,很繁琐,需要统一配置

描述您想要的解决方案

定义新接口IEntityBatchConfiguration来接管这些配置

    /// <summary>
    /// 定义实体的批量配置功能
    /// </summary>
    [MultipleDependency]
    public interface IEntityBatchConfiguration
    {
        /// <summary>
        /// 配置指定的<see cref="IMutableEntityType"/>
        /// </summary>
        /// <param name="modelBuilder">模型构建器</param>
        /// <param name="mutableEntityType">实体的<see cref="IMutableEntityType"/>类型</param>
        void Configure(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType);
    }

实现示例:表前缀 TableNamePrefixConfiguration

    /// <summary>
    /// 表名前缀配置
    /// </summary>
    public class TableNamePrefixConfiguration : IEntityBatchConfiguration
    {
        /// <summary>
        /// 配置指定的<see cref="IMutableEntityType"/>
        /// </summary>
        /// <param name="modelBuilder">模型构建器</param>
        /// <param name="mutableEntityType">实体的<see cref="IMutableEntityType"/>类型</param>
        public void Configure(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
        {
            string prefix = GetTableNamePrefix(mutableEntityType.ClrType);
            if (prefix.IsNullOrEmpty())
            {
                return;
            }

            string tableName = $"{prefix}_{mutableEntityType.GetTableName()}";
            modelBuilder.Entity(mutableEntityType.ClrType).ToTable(tableName);
        }

        /// <summary>
        /// 从实体类型获取表名前缀
        /// </summary>
        /// <param name="entityType">实体类型</param>
        /// <returns></returns>
        protected virtual string GetTableNamePrefix(Type entityType)
        {
            TableNamePrefixAttribute attribute = entityType.GetAttribute<TableNamePrefixAttribute>();
            return attribute?.Prefix;
        }
    }

应用

services.AddSingleton<IEntityBatchConfiguration, TableNamePrefixConfiguration>();

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions