Изменение соглашения об именах столбцов в коде EF4 - PullRequest
2 голосов
/ 06 февраля 2011

Я использую EF4 с CodeFirst.

public class MyContext : DbContext
{    
   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
      base.OnModelCreating(modelBuilder);

      modelBuilder.Conventions.Remove<XXX>();
      modelBuilder.Conventions.Add<XXX>());
   }
}

Какое соглашение я должен добавить или удалить, чтобы все идентификаторы БД (такие как имена столбцов, имена таблиц, хранимые процедуры и т. Д.) Были в верхнем регистре (или без кавычек)?

Идентификаторы, отправленные регистром (в кавычках) в базе данных Oracle, очень неудобны для пользователя.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Рассмотрим класс Product and Customer

public class Product {
    public int Id { get; set; }
    public string Name { get; set; }
    public int Stock { get; set; }
}

public class Customer {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class MyDbContext : DbContext {
    public DbSet<Product> Product { get; set; }
    public DbSet<Customer> Customer { get; set; }

    public MyDbContext() { }

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) {
        modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
        modelBuilder.Conventions.Add<TableNameUppercaseConvention>();
        base.OnModelCreating(modelBuilder);
    }
}

public class TableNameUppercaseConvention : IConfigurationConvention<Type, EntityTypeConfiguration> {
    public void Apply(Type typeInfo, Func<EntityTypeConfiguration> configuration) {
        configuration().ToTable(typeInfo.Name.ToUpper());
    }
}

РЕДАКТИРОВАТЬ:

Я пытался сделать что-то подобное, но кажется, что это не работает, idkпочему

public class ColumnUppercaseConvention : IConfigurationConvention<MemberInfo, PrimitivePropertyConfiguration> {
    public void Apply(MemberInfo memberInfo, Func<PrimitivePropertyConfiguration> configuration) {
        configuration().ColumnName = memberInfo.Name.ToUpper();
    }
}

мой лучший подход был

public class Customer {
    [Column(Name = "ID")]
    public int Id { get; set; }

    [Column(Name = "NAME")]
    public string Name { get; set; }
}

извините, я не могу сейчас помочь, но я буду продолжать пытаться.

0 голосов
/ 07 февраля 2011

Я не знаю, как вы можете сделать это с соглашениями, но взгляните на StoreNameAttribute.Вы можете применять к контексту, сущностям и свойствам.

Аннотации данных в коде сущности First

...