2012-09-28 23 views
10

Ben 'pe_' gibi bir önek ile veritabanındaki tüm tabloları eklemek istiyorum, sonra bir sınıf ve bir masa arasındaki haritalama böyle olacak: vb Kategorisi (pe_Category), Product (pe_Product),Varlık Çerçeve Kodunda Tablo Öneki Nasıl Eklenir?

ben tek harita ile, ben böyle yapabileceğimi biliyorum:

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

Ama belki orada neden varlıklar yüzlerce sevmiyorum.

Yani sadece böyle, küresel önek eklemek için bir yol bulmak ediyorum:

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 ; 

Herkes bana yardımcı olabilir?

1) adlandırılmış bir sınıf "DefaultTableConvention" oluşturun::

cevap

22

Şimdi varlık çerçevesi 6 alfa ile bir çözüm bulmak ettik

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

2) DBContext lütfen aşağıdaki kodu ekleyin:

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

Ve, hepsi bu DBContext eklenen tüm varlıkları etkileyecektir. Detay: http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

Güncelleme: Şimdi Ef6 ile, "Hafif Yapılandırma" denir kolay bir yolu var, burada kod var açıklanmıştır:

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

gelen Türleri Varlıkları değişti? –

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

sadece Ef6-beta üzerinde çalışır -1; Microsoft pluralised ediliyor bu da adını keser misin 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

İkinci kod örneğini denedim, ancak 'base.OnModelCreating (modelBuilder); Ancak, bunu önce ya da tür yapılandırma satırından sonra yerleştirirsem, Eklenti Eklentilerimdeki tablolarım iskelede isimleri değiştirmez. Yeni bir önek eklemek için AspNet tablolarının adını değiştirmeye çalışıyorum. . Yine de aynı kalıyorlar. – damccull

İlgili konular