DBEntityValidationException未被“清除”

时间:2013-02-05 20:37:32

标签: c# winforms entity-framework

我正在winforms应用程序中实现EF 5,并且我将上下文(DBContext)保存在表单中的私有字段中。

我尝试添加一个实体,因为它有一些无效的属性,我得到一个DBEntityValidationException。然后,我将这些属性设置为有效值并尝试再次添加它,并且我收到完全相同的DBEntityValidationException。

我想知道我是否需要清除任何东西?这是代码。

private SystemEntities _context = new SystemEntities(); // class field

try
{
    Customer customer = ... // set properties here
    _context.Customers.Add(customer);
    _context.SaveChanges();
}
catch (DBEntityValidationException ex)
{
    // get exception even though properties are updated with valid values
}

更新实体时,我没有注意到这个问题。非常感谢。

2 个答案:

答案 0 :(得分:4)

评论指出了正确的方向。我没有尝试保存更改并捕获异常,而是首先获得验证结果:

var results = new List<ValidationResults>();
Validator.TryValidateObject(entity, new ValidationContext(entity, null, null), results, true);

问题在于它实际上是将无效实体添加到集合中,因此它会在后续尝试中抛出异常。谢谢!

答案 1 :(得分:0)

这里有两个非常好的答案。这个独立的验证非常棒。我一直在寻找这个。

这对任何批处理操作都非常有用。

因此,请使用独立验证,或者如果您正在捕获DBEntityValidationException,请从DbContext的本地缓存中清除无效实体。