实体框架代码第一个映射在数据库中有camel案例

时间:2013-05-15 10:59:00

标签: entity-framework ef-code-first

我刚刚创办了一家新公司,我很高兴我能使用CodeFirst - 但是希望数据库字段能够得到满足。

我现在正在写很多这样的东西......

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

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

有什么方法可以将它全部设置为数据库的Camel Case,而不是必须装饰我的所有属性?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用code first custom conventions 如果使用Fluent Api,您也可以在上下文中使用每个Type的反射。 循环每个POCO,并为每个PROPERTY设置名称,将char1更改为小写。

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

编辑:反思挑战包括动态lambda ...... 直到你问我没有意识到循环需要动态lambda .... 张开嘴太宽了: - )

...这是我使用的代码片段的剪切和粘贴。 ...我使用EASIER /System.Linq.Dynamic方法

您可以使用Expression Complication库System.Linq.Expressions 或者你可以使用更容易使用Dynamic Lambda library 建立动态的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;
    }