コード ファーストのカスタム規則を使用
できます。Fluent Api を使用している場合は、代わりにコンテキスト内の各タイプのリフレクションを使用できます。各 POCO をループし、各 PROPERTY に対して名前を設定し、char1 を小文字に変更します。
modelBuilder.Entity<EFTestPoco>().Property(p=>p.UoM1).HasColumnName("camelCase");
編集: リフレクションチャレンジには動的ラムダが含まれています...あなたが尋ねるまで、ループに動的ラムダが必要であることに気づきませんでした....口を大きく開けすぎました:-)
... これは、私が使用するコードの切り取りと貼り付けです。...私はより簡単な /System.Linq.Dynamic アプローチを使用します
式の複雑化ライブラリSystem.Linq.Expressions
を使用するか、より簡単に使用できる 動的 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;
}