私はEF6で使用していますが、ベースリポジトリのSave()は次のようになります
public void Save()
{
try
{
Context.SaveChanges();
}
catch (DbEntityValidationException ex)
{
//Do Stuff
}
catch (Exception exception)
{
//Do stuff.
}
else
{
throw;
}
}
オブジェクトの保存が無効な場合、DbEntityValidationException
はEFからの予期されるエラーです。これで、新しい.NET Core 2プロジェクトに参加し、EF Coreでのエンティティ検証エラータイプの予想を知る必要があります。
Githubの問題を見ると、Entity Framework CoreにはDbEntityValidationException
に相当するものはありません。 ブログ (Githubの問題 #9662 からリンク)があります。これは、検証ロジックを自分で実行するためのコード例を示しています。
class MyContext : DbContext
{
public override int SaveChanges()
{
var entities = from e in ChangeTracker.Entries()
where e.State == EntityState.Added
|| e.State == EntityState.Modified
select e.Entity;
foreach (var entity in entities)
{
var validationContext = new ValidationContext(entity);
Validator.ValidateObject(entity, validationContext);
}
return base.SaveChanges();
}
}
Validator.ValidateObject
は、検証が失敗した場合にValidationException
をスローします。これは適切に処理できます。
検証属性で問題が発生した場合のリンクされた問題には、もう少し情報があります。