ABP EF Core为迁移设置默认字符串长度

发布时间 2023-05-25 19:39:46作者: cnblogsName

使用EF Core时,我们可以用MaxLength特性,为实体的字符串设置最大长度限制。

    [MaxLength(256)]
    public string Name { get; set; }

但是如果项目中,每个属性都要手写的话就太麻烦了,而且容易遗漏。

我们还可以通过重写DbContext的OnModelCreating方法,来修改所有字符串字段的最大长度。

重写OnModelCreating

修改前

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.ConfigureLIMS();
    }

修改后

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        // string类型的字段如果没有配置MaxLength,则默认添加256长度限制
        foreach (var property in builder.Model.GetEntityTypes()
            .SelectMany(t => t.GetProperties())
            .Where(p => p.ClrType == typeof(string)))
        {
            if (property.GetMaxLength().HasValue) continue;
            property.SetMaxLength(256);
            property.SetIsFixedLength(false);//false映射为nvarchar,true映射为nchar

        }

        builder.ConfigureLIMS();
    }