zoukankan      html  css  js  c++  java
  • 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());
     
  • 相关阅读:
    Python基础-socketserver
    MySQL数据库-pymysql模块操作数据库
    MySQL数据库-外键链表之一对多,多对多
    MySQL数据库-表内容操作
    第02组 Alpha冲刺(5/6)
    第02组 Alpha冲刺(4/6)
    第02组 Alpha冲刺(3/6)
    第02组 Alpha冲刺(2/6)
    第02组 Alpha冲刺(1/6)
    第02组 团队Git现场编程实战
  • 原文地址:https://www.cnblogs.com/dayang12525/p/10749988.html
Copyright © 2011-2022 走看看