实体框架验证

时间:2008-10-10 12:58:58

标签: c# .net entity-framework validation

我正准备开始一个新项目,我一直在研究实体框架。我的问题是验证实体的最佳策略是什么?我参与过的其他项目在大多数验证中使用了属性,但显然这在实体框架中是不可能的。是通过处理属性设置器中的部分方法来实现此目的的唯一方法吗?非常感谢所有建议。

6 个答案:

答案 0 :(得分:11)

我之前没有实际使用过Entity框架,但是快速搜索表明你有几个选项。

1)在应用程序的另一层验证

总是一个选项,我只是认为我会明确地把它扔出去。

2)挂钩实体的OnChanged事件然后执行验证

如果你有许多不同的属性可以为每个实体改变,那么可能会很脆弱并且会变得混乱/缓慢。

3)实现部分方法以验证属性更改

根据this帖子和this演练,可以使用部分方法进行验证。这似乎是您最好的选择,因为它不是非常具有侵入性,您可以有选择地实现您想要的验证。

我希望有所帮助。祝你好运。

答案 1 :(得分:6)

在.NET 4中,将在Entity-Framework中提供开箱即用的验证支持。

退房:http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx

所以不要努力实现太复杂的验证逻辑......

答案 2 :(得分:3)

如果使用ASP.NET MVC,则可以使用Validation Application Block或System.ComponentModel.DataAnnotations。文章Using Data AnnotationsUsing Application Block展示了如何使用Linq进行这些操作,但实体框架的用法应该类似。

答案 3 :(得分:1)

我们已经超越了对象上下文并拦截了SaveChanges()方法

public abstract class ValidationObjectContext : ObjectContext{
    ...

    public override int SaveChanges(SaveOptions options){
        ValidateEntities();
        return base.SaveChanges(options);
    }

}

这样,验证将一直持续到建立连接之前的最后一分钟,但在您(期待)对图表感到满意并准备提交之后(与其他任何更改验证的选项相反)我们所拥有的复杂规则仅在设置了几个属性后才有效。)我们有两个级别的验证,基本属性验证,字符串长度,可空性等等。业务逻辑验证,可能需要跨多个对象检查规则,可能会命中数据库进行确认。

答案 4 :(得分:0)

如果您使用的是WPF或Windows窗体,则可以实现 IDataErrorInfo 界面。

WPF Application Framework (WAF) 项目的 BookLibrary 示例应用程序显示了如何验证实体框架创建的实体。

答案 5 :(得分:0)

考虑在您的实体中实现IValidatableObject。