EntityFramework CodeFirst Отображение, чтобы иметь случай верблюда в базе данных

Я только что основал новую компанию, которая рада, что я использую CodeFirst, но хочу, чтобы поля базы данных были верблюжьими.

В настоящее время я пишу много такого рода вещей...

    [Column("active")]
    public bool Active { get; set; }

    [Column("paymentType")]
    public string PaymentType { get; set; }

Есть ли способ, которым я могу просто установить все в базу данных Camel Case, вместо того, чтобы украшать все мои свойства?

Спасибо

1 ответ

Решение

Вы можете использовать код в соответствии с пользовательскими соглашениями. Если вы используете Fluent Api, вы можете альтернативно использовать отражение каждого типа в вашем контексте. Цикл на каждом POCO и и для каждой НЕДВИЖИМОСТИ установите имя, изменяющее char1, на строчные буквы

modelBuilder.Entity<EFTestPoco>().Property(p=>p.UoM1).HasColumnName("camelCase");

РЕДАКТИРОВАТЬ: Задача Reflection включает в себя динамическую лямбду... Пока вы не спросили, я не понял, что цикл требует динамической лямбда.... Слишком широко открыл рот:-)

... Это фрагмент кода, который я использую.... Я использую EASIER /System.Linq.Dynamic подход

Вы можете использовать библиотеку Expression Complication System.Linq.Expressions или Вы можете использовать более простую в использовании библиотеку Dynamic Lambda для построения динамических операторов Linq.
ТАК вот пример кода

  // inside your context on model creating
  //....   
 // repeat for each poco.  // or reflect on thr context if feeling lazy and intellectual
 var entity = new EntityTypeConfiguration<Poco>;
// Get the properties of a poco
    foreach (var propInfo in typeof(T).GetProperties()) {
            SetCamelCase<T>(propInfo,entity);
        }
 modelBuilder.Configurations.Add(entity);
 ....
 } // end of ON model creating



private static void SetCamelCase<TModelPoco>(PropertyInfo propertyInfo, 
                             EntityTypeConfiguration<TModelPoco> entity) where TModelPoco : BaseObject {

        var camel = propertyInfo.Name.Substring(0, 1).ToLower() + propertyInfo.Name.Substring(1);

        switch (propertyInfo.UnderLyingType().Name) {
            case SystemDataTypeConstants.String :
            var propLambdaString = System.Linq.Dynamic.DynamicExpression.ParseLambda<TModelPoco, string >(propertyInfo.Name);
            entity.Property(propLambdaString).HasColumnName(camel);
            break;
            case SystemDataTypeConstants.Int32:
            var propLambdaInt =System.Linq.Dynamic.DynamicExpression.ParseLambda<TModelPoco, int >(propertyInfo.Name);
            entity.Property(propLambdaInt).HasColumnName(camel);
                break;
           //  SystemDataTypeConstants. // and teh rest you may use...
        }


    }
    public static Type UnderLyingType(this PropertyInfo propertyInfo) {
        return Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType;
    }
Другие вопросы по тегам