2012-03-30 88 views
0

如果Entity框架具有与DataRow.HasErrors等效的ADO.Net,那将会很好。实体框架相当于ADO.Net的DataRow.HasErrors?

我遇到了服务器在我保存时返回错误的情况(比如“二进制/字符串数据将被截断,不可为空的字段设置为空等),并且无法确定哪个实体导致了问题:在ADO.Net中,这很容易,因为在告诉DataAdapter保存更改之后,我可以通过所有的数据行,然后检查HasErrors,然后至少告诉我哪一行引起的问题。

我似乎无法找到一个实体相当于这个。有谁知道,如果有一个?

回答

1

在双方你描述你会得到一个案件当您尝试保存时引发。

此例外有一个属性,它叫Entries。您可以使用此属性来获取导致失败的实体。每个实体是一个DbEntityEntry对象并拥有具有真正entity加载荷大约是什么错误等

所以,你刚才描述捕获该异常,并期待在条目收集找到案件的更多信息属性出问题的根本原因是这样的:

try 
{ 
    c.SaveChanges(); 
} 
catch (DbUpdateException ex) 
{     
    IEnumerable<object> myBadEntities = 
     ex.Entries.Select(e => e.Entity); 
} 
+0

非常好。谢谢!就是这样。仅供参考,另外两个有趣的例外是DbEntityValidationException和 DbUpdateConcurrencyException。 – 2012-04-02 08:44:17