ええ、箱からの検証がないようです。あなたはSaveChanges
をオーバーライドすることにより、自分でそれを処理することができます:
public class MyContext : DbContext
{
public virtual DbSet<Model> Models { get; set; }
public MyContext()
{
}
public override int SaveChanges()
{
var changedEntities = ChangeTracker
.Entries()
.Where(_ => _.State == EntityState.Added ||
_.State == EntityState.Modified);
var errors = new List<ValidationResult>(); // all errors are here
foreach (var e in changedEntities)
{
var vc = new ValidationContext(e.Entity, null, null);
Validator.TryValidateObject(
e.Entity, vc, errors, validateAllProperties: true);
}
return base.SaveChanges();
}
}
public class Model
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(32)]
public string Field { get; set; }
[Range(15, 25)]
public int RangeField { get; set; }
}
- それなしであなた は、範囲の検証を取得することはありませんので、プロパティ
validateAllProperties
が重要です。
SaveChangesAsync
を上書きすることを忘れないでください。
残念なことに、fluent syntax
で制約を設定すると、このことは実際には役に立ちません。実際には、fluent syntax
は新しい制約を追加するだけでなく、既存の属性を上書きすることもできるため、属性の注釈に完全に切り替えるか、検証を行う別の方法を見つける方がよいでしょう。
完璧!これはすばらしい。私はテストします... – gabomgp