天天看点

EF Core 自动字段映射

protected override void OnModelCreating(ModelBuilder builder)
{
    var types = AppDomain.CurrentDomain.GetAssemblies()
      //取得实现了某个接口的类
      .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IRef)))).ToArray();
    //取得继承了某个类的所有子类
    //.SelectMany(a => a.GetTypes().Where(t => t.BaseType == typeof(RefEntity)))
    //.ToArray();

    foreach (var type in types)
    {
        if (type == typeof(RefEntity<>))
            continue;
        var props = type.GetProperties();
        foreach (var p in props)
        {
            switch (p.Name)
            {
                case "RefId":
                    builder.Entity(type).Property(p.Name).HasColumnName("REF_ID_");
                    break;
                case "FormDataRev":
                    builder.Entity(type).Property(p.Name).HasColumnName("F_form_data_rev_");
                    break;
                case "Id":
                    builder.Entity(type).Property(p.Name).HasColumnName("ID_");
                    break;
                case "ProjectId":
                    break;
                default:
                    builder.Entity(type).Property(p.Name).HasColumnName($"F_{p.Name}");
                    break;
            }

        }
    }