2012-09-28 19 views
10

chcę dodać wszystkie tabele w bazie danych z przedrostkiem „jak” pe_, wówczas odwzorowanie pomiędzy klasą i stolik będzie tak: Kategoria (pe_Category), produkt (pe_Product) itpJak dodać prefiks tabeli w Entity Framework Code First Globally?

I wiem, że z jedną mapą, mogę zrobić tak:

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

Ale nie podoba mi się to, ponieważ może mają setki podmiotów.

Więc jestem znalezienie sposobu, aby dodać przedrostek globalnie, podobnie jak to:

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 ; 

Ktoś może mi pomóc?

Odpowiedz

22

Teraz mam znaleźć rozwiązanie z Entity Framework 6 alpha:

1) utworzyć klasę o nazwie "DefaultTableConvention":

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

2) w DbContext, dodaj poniższy kod:

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

I to wszystko, wpłynie to na wszystkie elementy dodane w DbContext. Szczegół: http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

Aktualizacja: Teraz EF6, istnieje prostszy sposób, który jest nazywany "Lekki Konfiguracja", oto kod:

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

Mogłoby to również zatrzymać nazwisko jest w liczbie mnogiej? –

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

działa tylko na EF6-beta -1; Microsoft zmienił podmiotów do typów z 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

Próbowałem Twój drugi przykład kodu, ale dostaję błędy, jeśli zostawiam "base.OnModelCreating (modelBuilder);" Jednak jeśli wstawię to, albo przed LUB po linii konfiguracji typów, moje tabele nie zmieniają nazw w rusztowaniu po dodaniu Migracji. Próbuję zmienić nazwę tabel AspNet, aby dodać nowy prefiks . Po prostu pozostają takie same. – damccull

Powiązane problemy