Подтвердить что ты не робот

Как добавить префикс таблицы в код структуры Entity Framework First Globally?

Я хочу добавить все таблицы в базу данных с префиксом типа "pe_", тогда сопоставление между классом и таблицей будет выглядеть следующим образом: Category (pe_Category), Product (pe_Product) и т.д.

Я знаю, что с одной единственной картой я могу сделать вот так:

[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 ;

Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

Теперь я нашел решение с сущностью framework 6 alpha:

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

Update: Теперь с EF6 существует более простой способ, который называется "Легкая конфигурация", здесь код:

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

Ответ 2

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

работает только на ef6-beta-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));
 }