使所有字符串从实体框架数据库大写

时间:2019-04-17 19:46:42

标签: asp.net-core .net-core entity-framework-core

这是一个假设,还是“这可能吗?”问题。

我在ASP.Net Core 2.2 MVC中使用实体框架。有没有办法使所有字符串到大写?我不想将它们存储为大写,只希望在检索它们时将它们存储为大写。

相对于在模型属性上编写一堆“获取器”,我希望它在我的代码中仅 1位

2 个答案:

答案 0 :(得分:0)

There is currently no way to specify in one place that every property of a given type must use the same value converter. This feature will be considered for a future release.”-微软,实体框架核心文档。

阅读同一文档。将转换应用于各个字段(在OnModelCreating中)。

答案 1 :(得分:0)

要解决此问题,您可以尝试通过循环模型和属性来配置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);
                }
            }
        }
    }
}