entity frameworkvalidation

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

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

1)在应用程序的另一层validation

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

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

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

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

根据这篇文章和本演练,有部分方法可用于validation。 这似乎是您最好的选择,因为它不是非常具有侵入性,您可以有选择地实现您想要的validation。

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

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

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

所以不要努力实现太复杂的validation逻辑……

如果使用ASP.NET MVC,则可以使用Validation Application Block或System.ComponentModel.DataAnnotations。 使用数据注释和使用应用程序块的文章展示了如何使用Linq来完成它们,但entity framework的用法应该类似。

本文介绍如何将validation应用程序块与entity framework集成。 它可能会有所帮助。

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

public abstract class ValidationObjectContext : ObjectContext{ ... public override int SaveChanges(SaveOptions options){ ValidateEntities(); return base.SaveChanges(options); } } 

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

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

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

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