try
{
repo.Save(model);
}
catch (DbEntityValidationException ex)
{
ModelState.AddModelError("EntityError", ex);
}
你可以在此基础上扩展,创建一个实用方法来记录导致错误的字段。
foreach (var validationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
string error = string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
编辑:根据Peter Porfy的回答,我同意你应该避免将异常作为正常控制流程的一部分。理想情况下,你应该使用[MaxLength(n)]属性,并且可以在生成pocos时从数据库中获取这个属性,你可以修改你的T4模板来实现这一点。话虽如此,考虑到你正在与一个旧数据库集成,我假设模式更改可能发生在“新”应用程序(比如你正在开发的应用程序)的范围之外,这意味着这样的异常可能会变得更加常见,在这种情况下,我提供的上述代码示例可能会有用。至于每次模式更改都需要进行代码更改,还是事先进行适当的处理(在某种程度上),我认为这是一个完全不同的论点。