使用n层实体框架的无效实体在SaveChanges()上没有抛出异常



在某些情况下实体。IsValid为false,但不会在SaveChanges()上抛出异常。modelChangeSet只返回Valid实体(默认情况下),不会为无效实体抛出任何异常。因此,无效实体以已修改或已添加的状态保留在数据上下文中,并且不会捕获异常。例如,如果我创建一个具有重复主键的新实体(DataContext.EntitySet.CreateNew()),则该实体无效,但调用SaveChanges()不会抛出异常。你能推荐一种在调用SaveChanges()时获得验证错误消息的方法吗?

作为一种解决方案,我在调用SaveChanges()(客户端验证)之前检查无效实体,只有在所有实体都有效的情况下才调用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你有什么建议吗?

这是当前n层实体框架的一个缺点。请将此作为项目网站上的问题报告,我将继续跟进。

相关内容

  • 没有找到相关文章

最新更新