我正在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
}
更新实体时,我没有注意到这个问题。非常感谢。
答案 0 :(得分:4)
评论指出了正确的方向。我没有尝试保存更改并捕获异常,而是首先获得验证结果:
var results = new List<ValidationResults>();
Validator.TryValidateObject(entity, new ValidationContext(entity, null, null), results, true);
问题在于它实际上是将无效实体添加到集合中,因此它会在后续尝试中抛出异常。谢谢!
答案 1 :(得分:0)
这里有两个非常好的答案。这个独立的验证非常棒。我一直在寻找这个。
这对任何批处理操作都非常有用。
因此,请使用独立验证,或者如果您正在捕获DBEntityValidationException,请从DbContext的本地缓存中清除无效实体。