检索运行时赋予 HasMaxValue 的值

gha*_*ndi 5 c# validation entity-framework-core

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

流畅的配置示例:

modelBuilder.Entity<SomeEntity>(entity =>
            {
                entity.Property(p => p.SomeStringProperty)
                    .HasMaxLength(200);
            });
Run Code Online (Sandbox Code Playgroud)

HasMaxLength现在,当我手头只有一个 DBContext 时,我想在运行时获取该值。有可能吗?

正在思考类似的事情:ctx.Set<SomeEntity>.SomeStringProperty.MaxLength()

Iva*_*oev 6

思考类似的事情:ctx.Set<SomeEntity>.SomeStringProperty.MaxLength()

几乎。只是DbSet<T>您不需要使用 EF Core 模型元数据服务,先关注Context.Model属性,然后FindEntityType,GetPropertiesFindProperty等等,例如

ctx.Model.FindEntityType(typeof(SomeEntity))
    .FindProperty(nameof(SomeEntity.SomeStringProperty))
    .GetMaxLength()
Run Code Online (Sandbox Code Playgroud)

参考: Microsoft.EntityFrameworkCore.Metadata 命名空间