>故障排除实体验证在代码优先数据播种中的失败
>
使用代码优先方法的数据播种有时会遇到实体验证错误,从而损害数据完整性。 本指南说明了如何识别,理解和有效处理这些错误。
>
访问和检查验证错误
> Visual Studio提供了验证错误的基本概述,但是对于更详细的调试,请使用此代码片段捕获和记录特定的错误详细信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <code class = "language-csharp" > try
{
context.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach ( var eve in e.EntityValidationErrors)
{
Console.WriteLine($ "Entity of type \"{eve.Entry.Entity.GetType().Name}\" in state \"{eve.Entry.State}\" has the following validation errors:" );
foreach ( var ve in eve.ValidationErrors)
{
Console.WriteLine($ "- Property: \"{ve.PropertyName}\", Error: \"{ve.ErrorMessage}\"" );
}
}
throw ;
}</code>
|
登录后复制
集合列出了具有验证失败的实体,而嵌套EntityValidationErrors
收集详细介绍了特定于属性的问题。ValidationErrors
了解错误消息
>验证消息提供至关重要的线索。 他们通常会查明缺少所需字段,错误的数据格式(例如,无效的电子邮件地址)或其他违规行为。
改进了生产环境的异常处理
>用于鲁棒的生产应用程序利用Elmah进行错误记录,请考虑创建自定义异常类型以增强错误报告:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <code class = "language-csharp" > public class FormattedDbEntityValidationException : Exception
{
public FormattedDbEntityValidationException(DbEntityValidationException innerException) : base( "Entity Validation Errors Occurred" , innerException) { }
}
public class MyContext : DbContext
{
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException e)
{
var formattedException = new FormattedDbEntityValidationException(e);
throw formattedException;
}
}
}</code>
|
登录后复制
与Elmah一起使用时,此自定义在错误日志和面向用户的错误屏幕中提供了更清晰,更有信息的错误消息(例如ASP.NET“死亡黄色屏幕”)。 这改善了错误的诊断和解决方案。
以上是如何在代码第一数据播种中调试和处理实体验证错误?的详细内容。更多信息请关注PHP中文网其他相关文章!