这是一个假设还是“这可能吗?”题。
我在ASP.Net Core 2.2 MVC中使用实体框架。有没有办法使所有字符串都从数据库转换为大写?我不想将它们存储为大写,而只是想在检索它们时将它们转换为大写。
最好是,我希望它在我的代码中仅占1位 ,而不是在模型属性上编写一堆“ getter”。
“ 当前无法在一个地方指定给定类型的每个属性都必须使用相同的值转换器。将来的发行版中将考虑使用此功能。 ”-Microsoft,实体框架核心文档。
阅读相同的文档。用于将转换应用于各个字段(在OnModelCreating中)。
要解决此问题,您可以尝试通过循环模型和属性来配置HasConversion
。
尝试如下代码:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Product> Products { get; set; }
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
var converter = new ValueConverter<string, string>(
v => v,
v => v.ToUpper());
foreach (var entityType in builder.Model.GetEntityTypes())
{
foreach (var property in entityType.GetProperties())
{
if (property.ClrType == typeof(string))
{
builder.Entity(entityType.Name)
.Property(property.Name)
.HasConversion(converter);
}
}
}
}
}