我想在实体对象内部使用ObjectContext#SaveChanges()存储验证函数.现在,我可以自己跟踪所有已更改的对象,然后循环遍历所有这些对象并调用它们的验证方法,但我想更简单的方法是实现ObjectContext在保存每个实体之前将调用的一些回调.后者可以完成吗?还有其他选择吗?
我已经弄明白了.基本上,我们可以拦截ObjectContext的SavingChanges事件并循环通过新添加/修改的实体来调用它们的验证函数.这是我使用的代码.
partial void OnContextCreated() { SavingChanges += PerformValidation; } void PerformValidation(object sender, System.EventArgs e) { var objStateEntries = ObjectStateManager.GetObjectStateEntries( EntityState.Added | EntityState.Modified); var violatedRules = new List(); foreach (ObjectStateEntry entry in objStateEntries) { var entity = entry.Entity as IRuleValidator; if (entity != null) violatedRules.AddRange(entity.Validate()); } if (violatedRules.Count > 0) throw new ValidationException(violatedRules); }