2011-12-20 7 views
0

EF4を使用してモデルを作成するときは、モデルがきれいに読み取れるように、すべてのアンダースコアとテーブル/カラムプレフィックスを置き換えたいと思います。エンティティマッピングのアンダースコアを置換する

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

などなど:私はそうのようなエンティティ名を持っていると思い

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 

:私達のデータベースのような構造のものを持っています。

EFデザイナーは、edmxファイルを生成するときに、すべてのエンティティをデータベースに表示されているとおりに正確に命名します。私はこの動作がT4テンプレートを使って変更できることを知っていますが、私はちょうどedmxファイル内のEntitySetMapping要素を生成するデザイナーのエンティティの名前を変更できることを発見しました。私はちょうどそのような置換の後、私はデフォルトの動作が欲しいので、私はちょうどちょうどちょうどちょうどちょうどちょうど、T4テンプレートを使用せずにedmxファイルを処理したいと思うようですどちらのアプローチが最も妥当であり、なぜですか?

答えて

1

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

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"); 
} 

より多くの私はそれで動作し、より多くの私は、最初のコードが好きです。 Julie Lermanの新しい本Programming Entity Framework: Code Firstは素晴らしいです!

+0

データベースは非常に大きく(100+テーブルと1200+カラム)、デザイナーは退屈でエラーが発生する可能性があります。データベースはあらかじめ長い間存在していたため、最初のコードはオプションではありません。今日までは厳密に型指定されたデータセットを使用していましたが、EFに切り替える予定です。 – mhildreth

+0

@mhildreth Code first **は**既存のデータベースと連携するように設計されています。私は、デザイナーとマッピングウィンドウの大型モデルをどのようにマッピングしているか把握しようとしています。コードの最初のアプローチでは、私がFooテーブルのために持っているマッピングがFooConfiguration.csファイルにあることを知っています。 –

関連する問題