我是Entity Framework的新手,已经阅读了Julie Lerman的书以及很多关于它的文章。拥有已定义数据库和类的新项目,因此决定使用Code First方法(尽管它是新项目,因此数据库和类非常相似)。
所以,我们有: - 包含实体,映射和DbContext的数据库层 - 班级(业务层) - 带MVVM的WPF(UI层)
如果我理解Code First,数据库层引用业务层,UI引用数据库和业务层。 (如果我尝试在业务层中添加对数据库层的引用,则会出现循环引用错误。)
基本验证,比如我理解的必填字段或长度,但如果业务层不了解数据库层,可以在哪里进行额外的(更复杂的)验证?
谢谢, 克莱尔
答案 0 :(得分:2)
数据库层不引用业务层,表示层不引用数据库层。这将破坏分层架构的全部含义。正确的分层是:
Database Layer -> Busienss Layer -> Presentation Layer
实体可能会让您感到困惑。在简单的架构中,实体在所有层之间共享。为此,您必须将它们放置在所有图层使用的单独装配中。
验证可以在任何层进行:
答案 1 :(得分:1)
您可以通过实施IValidatableObject接口在您的实体类中执行复杂的验证。然后你可以在
中进行验证 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
//your validation logic. if there are no errors return an empty list
return new System.Collections.Generic.List<ValidationResult>();
}
EF 4.1了解此界面。所以它在保存更改之前调用此方法。如果有任何验证错误,它将中止trasnsaction。
答案 2 :(得分:0)
查看此博客以获取有关您的结构的更多信息。
这应该有所帮助。
博客还有一些值得一试的部分,
http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx
通常,您可以选择在多个地方进行验证。您的视图模型是一个可以做到的地方。例如,抛出ValidationException。如果您正在使用像telerik这样的第三方控件,那么他们会自动选择并显示您有验证问题。