我有一个代码优先的EF Core模型。有些列使用HasMaxLength(X)流利的语法来限制这些列的长度。目前,这些限制仅由数据库强制执行,当字符串变长时,我想在访问数据库之前先进行查找。

流利的配置示例:

modelBuilder.Entity<SomeEntity>(entity =>
            {
                entity.Property(p => p.SomeStringProperty)
                    .HasMaxLength(200);
            });


现在,当我只有一个DBContext时,我想在运行时重新获得HasMaxLength值。那是possilbe吗?

考虑以下内容:ctx.Set<SomeEntity>.SomeStringProperty.MaxLength()

最佳答案

考虑以下内容:ctx.Set<SomeEntity>.SomeStringProperty.MaxLength()


几乎。您需要使用EF Core模型元数据服务来代替DbSet<T>,先使用Context.Model属性,然后使用FindEntityTypeGetPropertiesFindProperty等。

ctx.Model.FindEntityType(typeof(SomeEntity))
    .FindProperty(nameof(SomeEntity.SomeStringProperty))
    .GetMaxLength()


参考:Microsoft.EntityFrameworkCore.Metadata Namespace

关于c# - 在运行时检索提供给HasMaxValue的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57376296/

10-11 02:11