对于使用N层实体框架的无效实体,SaveChanges()上没有抛出异常

时间:2014-07-08 19:42:37

标签: c# entity-framework validation n-tier-architecture savechanges

在某些情况下,entity.IsValid为false但在SaveChanges()上不会引发异常。 modelChangeSet仅返回Valid实体(默认情况下),并且不会为无效的实体抛出任何异常。因此,无效实体保留在具有修改或添加状态的datacontext中,并且不会捕获任何异常。例如,如果我使用重复的主键创建新实体(DataContext.EntitySet.CreateNew()),则该实体无效,但调用SaveChanges()不会引发异常。您是否可以在调用SaveChanges()?

时推荐一种获取验证错误消息的方法

作为一种解决方法,我在调用SaveChanges()(客户端验证)之前检查InValid实体,如果所有实体都有效,则仅调用SaveChanges()。

foreach (Entity entity in context.EntitySet.Where(x =>   x.ChangeTracker.State.Equals(ObjectState.Added) || x.ChangeTracker.State.Equals(ObjectState.Modified)))
{
   if (!entity.IsValid)
   {
          MessageBox.Show(((System.ComponentModel.IDataErrorInfo)(NTier.Common.Domain.Model.Entity)entity).Error);
          invalidEntityFound = true;    
    }
}

If (!invalidEntityFound)
   Context.SaveChanges()

设置GetChangeSet()方法参数includeOnlyValid = false会更改SaveChanges()的处理流程吗?有没有办法设置该参数值?

@ChristofSenn您有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是N层实体框架的当前缺点。请在project's site上将此问题报告为问题,我将对此进行跟进。