使用实体框架进行日期验证

本文关键字:日期 验证 框架 实体 | 更新日期: 2023-09-27 18:04:32

我正在做c#。. NET网站,我刚刚开始使用实体框架,并从现有的数据库创建了一个模型。

我已经使用数据注释添加了一些验证,这工作得很好,但我不确定如何处理糟糕的日期。

如果我从数据库中选择一个现有的记录,然后尝试将其datetime属性之一设置为无效日期,那么我自然会在尝试设置它时得到一个错误。我想做的是推迟这个错误,直到我调用GetValidationErrors(),我在保存更改之前处理。

var dbContext = new PlanEntities();
var plan = (from p in dbContext.Plan where p.PlanID == 123 select p).SingleOrDefault();
plan.StartDate = DateTime.Parse(StartDateInput.Value);  // Error here when bad date is given
ErrorMessage.InsertErrors(dbContext.GetValidationErrors());

最后一行将所有验证错误传递给用户控件。

我需要调用DateTime。解析,否则它不会编译,所以我猜我需要改变模型接受字符串而不是日期,但这似乎是不对的。我想做的是保留模型中的所有验证

使用实体框架进行日期验证

你需要在你的代码中处理这个错误。

DateTime reqDate;
if (DateTime.TryParse(inputString, out reqDate)) {
  // Any other, eg. range, checks...
  plan.StartDate = reqDate;
} else {
  // Report error back to the client.
}

更好的是DateTime.TryParseExact提供有效格式数组(从而处理美国与其他所有人在日期上的歧义,如"03/05/2015")。

错误报告是如何完成的取决于你使用的框架(WebForms vs. MVC)。在MVC中,日期解析可以通过模型绑定来处理。