• ef core自动映射


    原回答:https://stackoverflow.com/questions/26957519/ef-core-mapping-entitytypeconfiguration

    反射

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    
        // Interface that all of our Entity maps implement
        var mappingInterface = typeof(IEntityTypeConfiguration<>);
    
        // Types that do entity mapping
        var mappingTypes = typeof(DataContext).GetTypeInfo().Assembly.GetTypes()
            .Where(x => x.GetInterfaces().Any(y => y.GetTypeInfo().IsGenericType && y.GetGenericTypeDefinition() == mappingInterface));
    
        // Get the generic Entity method of the ModelBuilder type
        var entityMethod = typeof(ModelBuilder).GetMethods()
            .Single(x => x.Name == "Entity" && 
                    x.IsGenericMethod && 
                    x.ReturnType.Name == "EntityTypeBuilder`1");
    
        foreach (var mappingType in mappingTypes)
        {
            // Get the type of entity to be mapped
            var genericTypeArg = mappingType.GetInterfaces().Single().GenericTypeArguments.Single();
    
            // Get the method builder.Entity<TEntity>
            var genericEntityMethod = entityMethod.MakeGenericMethod(genericTypeArg);
    
            // Invoke builder.Entity<TEntity> to get a builder for the entity to be mapped
            var entityBuilder = genericEntityMethod.Invoke(builder, null);
    
            // Create the mapping type and do the mapping
            var mapper = Activator.CreateInstance(mappingType);
            mapper.GetType().GetMethod("Map").Invoke(mapper, new[] { entityBuilder });
        }
    }

    其他 ef core的方法

    class CustomerConfiguration : IEntityTypeConfiguration<Customer>
    {
      public void Configure(EntityTypeBuilder<Customer> builder)
      {
         builder.HasKey(c => c.AlternateKey);
         builder.Property(c => c.Name).HasMaxLength(200);
       }
    }
    
    ...
    // OnModelCreating
    builder.ApplyConfiguration(new CustomerConfiguration());
     
  • 相关阅读:
    VTK 9.0.1 vtkContextDevice2D 问题
    VTK 中文
    VTK 剪切
    VTK Color Map
    VTK Camera
    VTK Light
    VTK Read Source Object
    VTK Procedural Source Object
    Qt 布局开发问题记录
    Grafana 系列 (7):圖表是否可以数据追踪 (drill down)?(转)
  • 原文地址:https://www.cnblogs.com/dayang12525/p/10749988.html
Copyright © 2020-2023  润新知