【问题标题】:Silverlight 4 Entity framework issueSilverlight 4 实体框架问题
【发布时间】:2011-10-18 12:53:59
【问题描述】:
我在 Silverlight 中使用 RIA 服务创建了一个示例应用程序。我正在使用实体框架进行 CRUD 操作,但它不适用于带有以下异常的 INSERT 操作,“提交操作验证失败。请检查 EntitiesInError 中每个实体的 Entity.ValidationErrors 以获取更多信息。” 我有不应用任何验证,但不知道错误是如何发生的。
我已经测试过,当我创建一个 DB 实体对象并为其分配值然后通过调用 object.SaveChages() 进行保存时,它工作正常。但它的默认方法不起作用。任何帮助表示赞赏。
谢谢
【问题讨论】:
标签:
entity-framework
silverlight-4.0
wcf-ria-services
【解决方案1】:
SubmitOperation 回调有一个EntitiesInError 属性,您可以使用它来遍历实体。这就是获得“真正”错误的方法。
这是我必须向用户展示问题所在的方法...
public static bool WasSubmittedOK(SubmitOperation so, string errorMessageHeader, out string errorMessage)
{
errorMessage = string.Empty;
if (!so.HasError)
return true;
so.MarkErrorAsHandled();
errorMessage = "An unknown error has occurred";
if (so.EntitiesInError.Count() > 0)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}\r\n", errorMessageHeader);
foreach (Entity item in so.EntitiesInError)
{
#if DEBUG
builder.AppendFormat("\r\nFor {0}", item.GetType());
#endif
foreach (ValidationResult error in item.ValidationErrors)
{
builder.AppendFormat("\r\n- {0}", error.ErrorMessage);
Debug.WriteLine(string.Format("Error in {0}:'{1}'", string.Join(",", error.MemberNames.ToArray()), error.ErrorMessage));
}
}
errorMessage = builder.ToString();
}
else if (so.Error != null) { errorMessage = so.Error.Message; }
return false;
}
【解决方案2】:
您是否能够深入研究验证错误?实际上,我在 12 月的 MSDN 杂志数据点上有一篇关于此的文章,但我敢打赌你不想等待,对吧? :)
即使您没有应用任何特定验证,EF 仍会检查诸如外键约束之类的东西。如果您能看到错误是什么,最终将有助于解决您的问题。调试到异常。看看是否有可用的 DbEntityValidationException ......也许它在一个 innerexceptoin 中。 DbEntityValidationException 将有一个或多个 EntityValidationErrors。 这些中的每一个都包含为一个实例找到的所有错误的列表。这意味着一次扩展一个 EntityValidationErrors 项并查看其中包含的 ValidationError 项。