我将 EF4 与 CodeFirst 结合使用。
public class MyContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<XXX>();
modelBuilder.Conventions.Add<XXX>());
}
}
我应该添加或删除什么约定以使所有数据库标识符(如列名、表名、存储过程等)都为大写(或不带引号)?
Oracle 数据库中区分大小写(带引号)的标识符大大降低了用户友好性。
最佳答案
考虑产品和客户类
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());
}
}
编辑:
我试过这样做,但似乎行不通,我知道为什么
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; }
}
对不起,我现在帮不上忙,但我会继续努力。
关于c# - 更改代码优先 EF4 中的列名称约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914531/