我正准备开始一个新项目,我一直在研究实体框架。我的问题是验证实体的最佳策略是什么?我从事的其他项目在大多数验证中都使用了属性,但显然这在实体框架中是不可能的。是通过处理属性设置器中的部分方法来做到这一点的唯一方法吗?非常感谢所有建议。
6 回答
在 .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);
}
}
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.
如果您使用的是 WPF 或 Windows 窗体,那么您可能会实现IDataErrorInfo接口。
WPF 应用程序框架 (WAF)项目的BookLibrary示例应用程序展示了如何验证由实体框架创建的实体。
Consider implementing IValidatableObject in your entities.