【发布时间】:2010-09-16 12:13:57
【问题描述】:
我正在准备开始一个新项目,我一直在研究实体框架。我的问题是验证实体的最佳策略是什么?我从事的其他项目在大多数验证中都使用了属性,但显然这在实体框架中是不可能的。是通过处理属性设置器中的部分方法来做到这一点的唯一方法吗?非常感谢所有建议。
【问题讨论】:
标签: c# .net entity-framework validation
我正在准备开始一个新项目,我一直在研究实体框架。我的问题是验证实体的最佳策略是什么?我从事的其他项目在大多数验证中都使用了属性,但显然这在实体框架中是不可能的。是通过处理属性设置器中的部分方法来做到这一点的唯一方法吗?非常感谢所有建议。
【问题讨论】:
标签: c# .net entity-framework validation
【讨论】:
在 .NET 4 中,Entity-Framework 将提供开箱即用的验证支持。
查看:http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx
所以不要努力实现过于复杂的验证逻辑...
【讨论】:
如果您使用 ASP.NET MVC,那么您可以使用验证应用程序块或 System.ComponentModel.DataAnnotations。文章Using Data Annotations 和Using Application Block 展示了如何使用Linq 进行操作,但与entity-framework 的用法应该类似。
【讨论】:
我们已经覆盖了对象上下文并拦截了 SaveChanges() 方法
public abstract class ValidationObjectContext : ObjectContext{
...
public override int SaveChanges(SaveOptions options){
ValidateEntities();
return base.SaveChanges(options);
}
}
这样,验证将一直持续到建立连接之前的最后一分钟,但在您(期望)对图表感到满意并准备好提交之后,(与验证任何更改的其他选项相反,因为有些像我们这样的复杂规则只有在设置了几个属性后才有效。)。我们有两个级别的验证,基本属性验证,例如字符串长度、可空性等。以及业务逻辑验证,这可能需要检查多个对象的规则,可能需要访问数据库进行确认。
【讨论】:
如果您使用的是 WPF 或 Windows 窗体,那么您可以实现 IDataErrorInfo 接口。
WPF Application Framework (WAF) 项目的 BookLibrary 示例应用程序展示了如何验证实体框架创建的实体。
【讨论】:
考虑在您的实体中实现 IValidatableObject。
【讨论】: