Как добавить префикс таблицы в код структуры 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 ;
Кто-нибудь может мне помочь?
Ответы
Ответ 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));
}