2017-04-15 11 views
2

私は、次のリモート検証規則を持って次のように私のクラスにプロパティにリンクされているEntity Framework Coreは保存時にデータを検証しませんか?

[AcceptVerbs("Get", "Post")] 
public IActionResult ValidateWindowEndDate(DateTime? endDate, DateTime? startDate) 
{ 
    int minWeeks = 8; 

    if (startDate.HasValue && endDate.HasValue 
      && (endDate < startDate.Value.AddDays(minWeeks * 7))) 
    { 
     return Json(data: $"Inspection window end date must be at least {minWeeks} weeks after start date."); 
    } 

    return Json(data: true); 
} 

:私は私の見解では無効なデータを入力すると、予想通り

[Required] 
[Remote("ValidateWindowEndDate", "InspectionWindow", AdditionalFields = "StartDate")] 
public DateTime EndDate { get; set; } 

、検証が発生します。しかし、コード内でオブジェクトのインスタンスを取得した場合は、無効な日付に変更してデータベースに保存し直してください。

luInspectionWindow.EndDate = luInspectionWindow.StartDate.AddDays(1); 
_context.Update(luInspectionWindow); 
await _context.SaveChangesAsync(); 

[保存は例外なく行われ、検証メソッドが呼び出されることはありません、私は期待していた動作ではありませんでした。私はEFがレコードを無効と拒絶すると思ったのですか?これは期待される行動ですか?

答えて

3

これは、EFがコアで動作する方法の変更であることが判明しました。これで、検証はまったく行われなくなりました。これは、クライアントとサーバー(Model.State経由)に任せられます。 Rowan Miller explains that decision in the EF repo次のように:それは通常であるので、

はEFコアでは、我々は検証をやって落としすでに 行われ、クライアント側、サーバー側、その後、あまりにもデータベースインチ

は、私は私の特定のシナリオでモデル状態を使用することはできませんので、代わりに私がValidatorオブジェクトを介して手動で作業をリモート検証を取得しようとしましたが、私はどちらかそれを持つすべての運を持っていませんよ。この質問の詳細:Validator.TryValidateObject does not call Remote validation

関連する問題