1

CodeFirst を使用することに満足している新しい会社を始めたばかりですが、データベース フィールドをキャメルケースにしたいと考えています。

現在、この種の記事をたくさん書いています...

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

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

すべてのプロパティを装飾するのではなく、すべてをキャメルケースのデータベースに設定する方法はありますか?

ありがとう

4

1 に答える 1

1

コード ファーストのカスタム規則を使用 できます。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;
    }
于 2013-05-15T11:28:17.493 に答える