【发布时间】:2020-11-06 20:46:29
【问题描述】:
我正在尝试针对 Entity Framework Core 中的 .HasMaxLength 属性进行验证。
这是一个示例模型构建器方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>(entity =>
{
entity.Property(e => e.AddressEmail)
.IsRequired()
.HasMaxLength(255)
.IsUnicode(false)
.HasDefaultValueSql("('')");
使用我的上下文,我可以像这样找到最大长度:
dbContext.Model.FindEntityType(typeof(Address)).FindProperty("AddressEmail").GetMaxLength()
使用 Fluent Validation,我可以做到这一点:
RuleFor(Address => Address.AddressEmail).NotNull().MaximumLength(255);
这样可以,但是当我更改数据库结构时,我必须更新我的验证器。
我试图弄清楚如何从实体框架 MaxLength 属性驱动我的 Fluent Validation 规则
任何帮助将不胜感激。
**** 引入 dbcontext 的部分工作方式,但我仍在努力获取规则:
public AddressValidator(DbContext dbContext)
{
Microsoft.EntityFrameworkCore.Metadata.IEntityType et = dbContext.Model.FindEntityType(typeof(Address));
foreach (var Property in et.GetProperties())
{
var maxLength = Property.GetMaxLength();
---->>>>> RuleFor(x =>x.{PropertyName}) Invalid but this is the idea
}
【问题讨论】:
-
考虑使用数据注释验证。在这种情况下,您可以将一些带有自定义验证的属性放到部分类中。
-
谢谢,@Sergey - 我开始使用 Data Annotation,但我的验证太复杂了,而且我不断收到关于库版本的无法克服的错误。这是个好主意 - 它只是不适合我的情况。
标签: c# entity-framework entity-framework-core fluentvalidation