0

EF4を使用してモデルを作成する場合、モデルがきれいに読み取れるように、すべてのアンダースコアとテーブル/列のプレフィックスを置き換えたいと思います。私たちのデータベースは次のような構造になっています。

Table:ABC_Customer
-Column:ABC_Customer_Id
-Column:Name
-Column:ABC_Customer_Type_Id

Table:ABC_Customer_Type
-Column:ABC_Customer_Type_Id
-Column:Name

私はそのようなエンティティ名を持ちたいです:

Entity:Customer
-Property:CustomerId
-Property:Name
-Property:CustomerTypeId
-NavigationProperty:CustomerType

などなど。

edmxファイルを生成するとき、EFデザイナーは、データベースに表示されているとおりにすべてのエンティティに名前を付けます。この動作はT4テンプレートを使用して変更できることは知っていますが、デザイナーでエンティティの名前を変更できることを発見しました。これにより、edmxファイル内にEntitySetMapping要素が生成されるため、T4はやり過ぎのようです。T4テンプレートを使用せずに、edmxファイルを後処理したいようです。その置き換え後、デフォルトの動作が必要だからです。どのアプローチが最も適切で、その理由は何ですか?

4

2 に答える 2

1

EDMXはマッピングを担当し、新しい名前はEDMXのmapping=で定義する必要があります。

于 2011-12-20T21:10:12.660 に答える
0

非常に多くのテーブルを処理する場合を除いて、すぐに使用できる機能を使用します。T4テンプレートに必要なことを正確に実行させるための時間投資は、それだけの価値がない場合があります。

小さなデータベースの場合、データベースを最初に開発する場合は、設計者に固執します。

または、最初にコードを実行して、必要なクリーンなモデルを取得し、それを既存のデータベースにポイントして、モデル内の各オブジェクトのコードでマッピングを処理することもできます。

public class CustomerConfiguration : EntityTypeConfiguration<Customer>
{
    public CustomerConfiguration()
    {
        Property(t => t.CustomerId).HasColumnName("ABC_Customer_Id");
        ...
    }
}

次に、テーブルマッピングを変更すると同時に、カスタム構成(つまりマッピング)をモデルに適用します。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new CustomerConfiguration());

    modelBuilder.Entity<Customer>().ToTable("ABC_Customer");
}

作業を重ねるほど、最初にコードが好きになります。JulieLermanの新しい本ProgrammingEntityFramework:Code Firstは素晴らしいです!

于 2011-12-21T12:54:30.283 に答える