17

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

4

6 回答 6

11

我以前没有真正使用过实体框架,但快速搜索表明您有几个选择。

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

总是一个选择,我只是想我会明确地把它扔掉。

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

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

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

根据这篇文章和这篇演练,有部分方法可用于验证。这似乎是您的最佳选择,因为它不是很侵入性,您可以有选择地实施您想要的验证。

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

于 2008-10-19T03:30:26.460 回答
6

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

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

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

于 2010-01-15T01:39:20.240 回答
3

如果您使用 ASP.NET MVC,那么您可以使用验证应用程序块或 System.ComponentModel.DataAnnotations。Using Data AnnotationsUsing Application Block两篇文章展示了如何使用 Linq 进行操作,但与 entity-framework 的用法应该类似。

于 2008-10-19T11:33:18.093 回答
1

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

public abstract class ValidationObjectContext : ObjectContext{
    ...

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

}

That way the validation is left until the last minute before the connections are made but after you are (expecting) to be happy with the graph and ready to commit, (as opposed to other options to validation on any change, since some complex rules like those we have are only valid after several properties are set.). We have two levels of validation, Basic Property validation, things like string length, nullability etc. And Business Logic validation, which might require checking rules across multiple objects, possibly hitting the database to confirm.

于 2010-11-14T08:47:32.650 回答
0

如果您使用的是 WPF 或 Windows 窗体,那么您可能会实现IDataErrorInfo接口。

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

于 2010-07-28T17:00:47.317 回答
0

Consider implementing IValidatableObject in your entities.

于 2013-08-20T16:23:59.700 回答