gpt4 book ai didi

asp.net-mvc-3 - EF 代码第一个 : How do I see 'EntityValidationErrors' property from the nuget package console?

转载 作者:行者123 更新时间:2023-12-03 04:31:55 24 4
gpt4 key购买 nike

我对此不知所措:

我已经为 Entity Framework (4.1.3) 代码优先方法定义了我的类。一切都很好(我正在创建表格等),直到我开始播种。

现在当我这样做

Add-Migration "remigrate" ; Update-Database;

我在包控制台上收到错误“一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。”

我的 Seed() 方法中有一个断点,但因为当项目未运行时我在控制台上运行它,所以我对如何获取详细信息一无所知(PS - 我已经看到了线程 Validation failed for one or more entities while saving changes to SQL Server Database using Entity Framework 显示了我如何查看该属性。)

我知道我的 Seed() 方法有问题,因为如果我在方法调用之后立即返回,错误就会消失。那么如何设置断点以便我可以看到验证错误是什么?有点输了。或者有其他方法可以在 nuget 控制台中跟踪它吗??

最佳答案

我最近也被这个问题困扰了。我通过在 Seed 方法的 Configuration 类中放置一个包装函数来修复此问题,并将对 SaveChanges 的调用替换为对我的函数的调用。此函数将简单地枚举 EntityValidationErrors 集合中的错误,并重新抛出异常,其中异常消息列出了各个问题。这使得输出显示在 NuGet 包管理器控制台中。

代码如下:

/// <summary>
/// Wrapper for SaveChanges adding the Validation Messages to the generated exception
/// </summary>
/// <param name="context">The context.</param>
private void SaveChanges(DbContext context) {
try {
context.SaveChanges();
} catch (DbEntityValidationException ex) {
StringBuilder sb = new StringBuilder();

foreach (var failure in ex.EntityValidationErrors) {
sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
foreach (var error in failure.ValidationErrors) {
sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
sb.AppendLine();
}
}

throw new DbEntityValidationException(
"Entity Validation Failed - errors follow:\n" +
sb.ToString(), ex
); // Add the original exception as the innerException
}
}

只需在种子方法中将对 context.SaveChanges() 的调用替换为 SaveChanges(context) 即可。

关于asp.net-mvc-3 - EF 代码第一个 : How do I see 'EntityValidationErrors' property from the nuget package console?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10219864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com