Shared/Kernelx.MO2EFCore/Cmpts/EFMOI/Core/EFCoreExtensions.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Kernelx.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using System; 
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Reflection; 
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Kernelx.Contexts;

namespace Kernelx.Cmpts.EFMOI.Core
{
      
    internal static class EFCoreExtensions
    {
         
        private static MethodInfo UseIdentityColumn;
        static EFCoreExtensions()
        {
            //仅开发模式下去尝试
            if (!ContextWorkload.HasCurrent() || (ContextWorkload.Current.GetRuntimeEnvironment() is ContextEnvironment env) && env.IsDevelopment) 
            {
                //尝试加载SqlServer的UseIdentityColumn扩展方法
                try
                {
                    var ass = Assembly.Load(new AssemblyName("Microsoft.EntityFrameworkCore.SqlServer"));
                    UseIdentityColumn = ass.GetType("Microsoft.EntityFrameworkCore.SqlServerPropertyBuilderExtensions")
                    ?.GetMethod("UseIdentityColumn", new[] { typeof(PropertyBuilder), typeof(int), typeof(int) });
                }
                catch { }
            } 
        }
          
        /// <summary>
        /// 尝试反射查找UseIdentityColumn方法,找到后调用
        /// </summary>
        /// <param name="propertyBuilder"></param>
        /// <param name="seed"></param>
        /// <param name="increment"></param>
        private static void TryUseIdentityColumn(PropertyBuilder propertyBuilder, int seed = 1, int increment = 1)
        {
             
            UseIdentityColumn?.Invoke(null,new object[] { propertyBuilder, seed, increment });
        }
          
        /// <summary>
        /// 构建模型映射到存储库中的信息,(增加字段描述信息生成)
        /// </summary>
        /// <param name="modelBuilder"></param>
        /// <param name="entityType"></param>
        public static void BuilderModelMapping(this ModelBuilder modelBuilder, Type entityType)
        {
            //
            var eb = modelBuilder.Entity(entityType);
            var typeAtts = entityType.GetCustomAttributes(false); 

            var eName=(typeAtts.FirstOrDefault(x=>x is TableAttribute) as TableAttribute)?.Name??entityType.Name;



后面还有 44 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。