tom*_*dox 4 c# entity-framework-core asp.net-core-mvc
我有以下远程验证规则:
[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);
}
Run Code Online (Sandbox Code Playgroud)
链接到我的课程中的属性,如下所示:
[Required]
[Remote("ValidateWindowEndDate", "InspectionWindow", AdditionalFields = "StartDate")]
public DateTime EndDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
当我在视图中输入无效数据时,将按预期进行验证。但是,如果我在代码中获得了该对象的实例,则将日期更改为无效的日期,然后将其保存回数据库,例如
luInspectionWindow.EndDate = luInspectionWindow.StartDate.AddDays(1);
_context.Update(luInspectionWindow);
await _context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
然后保存就不会发生异常,并且永远不会调用验证方法,这不是我所期望的行为。我以为EF会拒绝该记录为无效?这是预期的行为吗?
因此,事实证明这是EF在Core中工作方式的变化。现在,它不再进行任何验证,而将验证留给客户端和服务器(通过Model.State)。 罗恩·米勒(Rowan Miller)在EF回购协议中解释了以下决定:
在EF Core中,我们放弃了进行验证,因为它通常已经在客户端,服务器端以及数据库中完成了。
我不能在特定情况下使用模型状态,因此我尝试通过该Validator对象手动进行远程验证,但是我也没有运气。有关此问题的更多信息:Validator.TryValidateObject不调用远程验证。
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |