2012-09-28 16 views
10

データベース内のすべてのテーブルに 'pe_'のような接頭辞を追加すると、クラスとテーブルの間のマッピングは次のようになります:Entity Frameworkのコードプレースメントをグローバルに最初に追加する方法

I 1つのマップでは、次のようにすることができます:

[Table("pe_Category")] 
public class Category 
{ 
    public int CategoryId { get; set; } 
} 

しかし、何百ものエンティティがある可能性はありません。

だから、僕は、このように、グローバルプレフィックスを追加する方法を見つけることだ:

public class Category 
{ 
    public int CategoryId { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
} 

// Global config, will affect all entities 
table.Name = "pe_" + Class.TypeName ; 

誰もが私を助けることができますか?

答えて

22

今私は、エンティティフレームワーク6アルファで解決策を見つけるました:

1) "DefaultTableConvention" という名前のクラスを作成します。

public class DefaultTableConvention 
: IConfigurationConvention<Type, EntityTypeConfiguration> 
{ 
    public void Apply(
     Type type, 
     Func<EntityTypeConfiguration> configuration) 
    {    
     configuration().ToTable("PE_" + type.Name); 
    } 
} 

2)DbContextでは、以下のコードを追加します

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Add<DefaultTableConvention>(); 
    } 

これだけで、DbContextに追加されたすべてのエンティティに影響します。詳細:http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

更新: 今すぐEF6で、 "軽量の構成" と呼ばれる簡単な方法は、ここにコードがあるのだ。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Types().Configure(entity => entity.ToTable("PE" + entity.ClrType.Name)); 
    } 
+1

からタイプにエンティティを変更し、これはまたpluralisedされている名前を停止しますか? –

11
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entities().Configure(entity 
     => entity.ToTable("PE" + entity.ClrType.Name)); 
} 

のみEF6ベータで動作します-1; MicrosoftはEF6-RC1

http://blogs.msdn.com/b/adonet/archive/2013/08/21/ef6-release-candidate-available.aspx#10444012

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Types().Configure(entity 
     => entity.ToTable("PE" + entity.ClrType.Name)); 
} 
+0

2番目のコード例を試しましたが、 'base.OnModelCreating(modelBuilder);を省略するとエラーが発生します。しかし、タイプの設定行の前または後のいずれかに配置すると、私のテーブルは、私がAdd-Migrationを実行したときに、スキャフォールディングの名前を変更しません。新しいプレフィックスを追加するAspNetテーブルの名前を変更しようとしています。彼らはただ同じままだ。 – damccull

関連する問題