代码之家  ›  专栏  ›  技术社区  ›  uriDium

在实体框架4中有没有比覆盖保存更改更好的方法来执行验证?

  •  0
  • uriDium  · 技术社区  · 14 年前

    我觉得在您的上下文(即您的数据层)中进行验证有点不对。对于数据层来说,依赖验证似乎有点倒退。对我来说,在业务逻辑中进行验证更有意义,一旦验证完成,就可以持久化更改。数据层应该能够依赖于数据是有效的这一事实。

    我不喜欢重写SavingChanges的第二个原因是它看起来非常混乱,并且很快就充满了代码。当你有一个复杂的对象图时,这个方法会很快变得非常混乱

    if (entity is MyType)
    {
        //perform MyType validation
    }
    

    第三个我不喜欢的原因是我必须在对象上下文的构造函数中传递所有额外的验证器对象。我正在使用一个DI框架,但它仍然感觉很混乱。

    有没有什么可以让您访问存储库并进行验证,而不必将所有内容都放入一个SavingChanges方法中?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Craig Stuntz    14 年前

    如果你的代码很难看,写更好的代码。:)

    var entities = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
                                             .Select(ose => ose.Entity);
    var errors   = entities.OfType<IMyValidationInterface>()
                           .SelectMany(e => e.Validate());
    

    …完成了!