是否有更好的方法在实体框架4中执行验证而不是覆盖SavingChanges?

时间:2010-10-21 09:04:47

标签: validation entity-framework-4

在您的数据层上下文中进行验证感觉有点不对劲。对于数据层依赖于验证似乎有点倒退。对于我来说,在业务逻辑中进行验证更有意义,一旦验证完成,就会持续进行更改。数据层应该能够依赖数据有效的事实。

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

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

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

我想我只有这个问题,因为我让人们使用存储库。我可以添加一个间接层,然后他们将不得不使用某种DTO。这里的缺点是它似乎需要做很多额外的工作。还有必须进行的常量映射。

无论如何,您是否可以访问存储库并进行验证而不将所有内容都放在一个SavingChanges方法中?

1 个答案:

答案 0 :(得分:0)

如果您的代码很丑,请编写更好的代码。 :)

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

......完成了!