2008-10-10 253 views
16

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

回答

11

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

1)验证在你的应用程序

总是一个选择另一层,我只是想我会扔在那里作了明确规定。

2)勾入实体的给onChanged事件,则执行验证

可能的脆,会变得混乱/慢后,如果你有很多不同性质的东西,可以为每个实体改变。

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

根据this后和this演练有局部的方法可用于验证。这看起来像是你最好的选择,因为它不是非常侵入性的,你可以有选择地实现你想要的验证。

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

+0

#2和#3有什么不同?它产生的部分方法是OnChanged事件...除非我失去了一些东西。 – 2009-11-03 22:53:00

+0

你可能是对的。自从我甚至看过EF以来,已经有很长一段时间了。 – smaclell 2009-11-09 00:59:34

+3

我将#2和#3分别读作实体和属性级验证。当然,这两种策略有不同的用途:实体级验证测试所有属性在一起的有效性(例如,相互排斥的属性未被设置),而属性级验证仅考虑一个属性的内容时间(例如,电子邮件地址是正确的形式)。 – ladenedge 2010-02-09 19:52:41

3

如果使用ASP.NET MVC,那么你可以使用验证应用程序块或System.ComponentModel.DataAnnotations。文章Using Data AnnotationsUsing Application Block展示了如何使用Linq来完成它们,但实体框架的用法应该是类似的。

2

This本文介绍如何验证应用程序块与实体框架集成。这可能有一些帮助。

0

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

WPF Application Framework (WAF)项目BookLibrary示例应用程序演示如何通过实体框架创建的实体可以验证。

1

我们overrident对象上下文和拦截的SaveChanges()方法

public abstract class ValidationObjectContext : ObjectContext{ 
    ... 

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

} 

这样的验证是留到最后一分钟的连接之前,但你(预期)后获得幸福图形并准备提交,(与其他选项相比,可以对任何更改进行验证,因为像我们这样的复杂规则仅在设置了多个属性后才有效)。我们有两个验证级别,基本属性验证,诸如字符串长度,可空性等。而业务逻辑验证可能需要跨多个对象检查规则,可能会触击数据库进行确认。

0

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