提问人:Micah 提问时间:10/10/2008 最后编辑:StuartLCMicah 更新时间:8/11/2014 访问量:22900
实体框架验证
Entity Framework Validation
问:
我正准备开始一个新项目,我一直在研究实体框架。我的问题是验证实体的最佳策略是什么?我参与过的其他项目在大多数验证中使用了属性,但显然这在实体框架中是不可能的。唯一的方法是在属性设置器中处理分部方法吗?非常感谢所有建议。
答:
我以前没有实际使用过实体框架,但快速搜索表明您有几个选项。
1) 在应用程序的另一层进行验证
总是一个选择,我只是想我会明确地把它扔在那里。
2) 挂接到实体的 OnChanged 事件,然后执行验证
可能会很脆,并且如果您有许多不同的属性,则会变得混乱/缓慢,每个实体都可以更改。
3) 实现部分方法来验证属性更改
根据这篇文章和本演练,有部分方法可用于验证。这似乎是您最好的选择,因为它不是很侵入性,您可以有选择地实现所需的验证。
我希望这会有所帮助。祝你好运。
评论
如果使用 ASP.NET MVC,则可以使用验证应用程序块或 System.ComponentModel.DataAnnotations。文章使用数据注释和使用应用程序块展示了如何使用 Linq 执行这些操作,但 entity-framework 的用法应该类似。
评论
在 .NET 4 中,Entity-Framework 中将提供开箱即用的验证支持。
退房: http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx
因此,不要努力实现过于复杂的验证逻辑......
评论
如果使用的是 WPF 或 Windows 窗体,则可以实现 IDataErrorInfo 接口。
WPF 应用程序框架 (WAF) 项目的 BookLibrary 示例应用程序演示如何验证实体框架创建的实体。
我们已经覆盖了对象上下文并截获了 SaveChanges() 方法
public abstract class ValidationObjectContext : ObjectContext{
...
public override int SaveChanges(SaveOptions options){
ValidateEntities();
return base.SaveChanges(options);
}
}
这样一来,验证就会留到建立连接之前的最后一分钟,但在您(期望)对图形感到满意并准备好提交之后(与验证任何更改的其他选项相反,因为一些复杂的规则(例如我们拥有的规则)仅在设置了多个属性后才有效。我们有两个级别的验证,基本属性验证,如字符串长度、可空性等。以及业务逻辑验证,这可能需要跨多个对象检查规则,可能会访问数据库进行确认。
请考虑在实体中实现 IValidatableObject。
评论