0

我是Entity Framework的新手,已阅读Julie Lerman的书以及大量关于它的文章。有一个新的项目已经定义了数据库和类,所以决定使用Code First方法(尽管它是新的项目,所以数据库和类非常相似)。Entity Framework 4.1代码优先在哪里验证

因此,我们有: - 与实体,映射和的DbContext 数据库层 - 班(业务层) - WPF用MVVM(UI层)

如果我理解的代码首先正确,数据库层引用业务层,UI引用数据库和业务层。 (如果我尝试在数据库层的业务层引用中添加循环引用错误,我会收到循环引用错误。)

基本验证,如所需的字段或长度我了解,但如果业务层需要额外(更复杂)验证不知道数据库层?

感谢, 克莱尔

+0

为什么DOE你的数据库层参考业务层?这看起来不正确。您的业​​务层中有哪些类,因为通常您的ViewModel类将具有业务逻辑。 – peter 2011-06-03 02:48:52

回答

0

看一看这个博客获得有关结构的详细信息。

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

这应该帮助。

有一对夫妇多个部分的博客里面是值得学习的,

http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx

http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx

一般来说,你必须将验证在许多地方的选择。您的视图模型是一个可以做到的地方。例如抛出一个ValidationException。如果您使用telerik等第三方控件,那么它们会自动提取并显示您有验证问题。

+0

您好Peter,我的同事在视图模型上坚持认为所有的验证(除了基本检查,即如果什么都没有输入......)应该在业务层完成 – Claire 2011-06-03 02:57:17

+0

我已经浏览了ScottGu的博客,但由于我不熟悉ASP或MVC并不完全理解Controller类和WPF应用程序中的等价物。 – Claire 2011-06-03 03:09:21

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知道这个接口。因此它在保存更改之前调用此方法。如果有任何验证错误,它将中止该事务。

2

数据库层不引用业务层,表示层不引用数据库层。这将打破分层体系结构的整体意义。正确的分层是:

Database Layer -> Busienss Layer -> Presentation Layer 

什么可能让你感到困惑的是实体。在简单的架构中,实体在所有层之间共享。为了达到这个目的,你必须将它们放置到所有图层使用的组件中。

验证可以发生在任何一层:

  • 表示层可以验证用户输入的 - 它可以利用从业务层的方法为
  • 业务层应该执行业务规则,它也可以公开的方法UI做用户输入验证
  • 数据库层可以验证如果实体符合在数据库中定义的约束(例如,需要的列填充的)
+0

谢谢拉迪斯拉夫, 你提到的引用确实更有意义。 让我感到困惑的是Julie Lerman的实体框架书(第25章 - 先使用CTP5编码)的例子。 其中有3个项目: 类(我认为是业务逻辑); 坚持(我认为是实体) - 引用类; 控制台 - 引用类和持久性。作为代码的第一个项目,我认为引用可能会因代码的不同而不同。 – Claire 2011-06-03 10:51:37

+0

我不认为这种情况下的类是商业逻辑 - 它们是实体。 – 2011-06-03 10:53:18

+0

我在想什么?我花了很多时间阅读代码,首先根据该示例确认我的(错误的)假设,并尝试使其工作。你已经度过了我的一天!谢谢你,谢谢你,谢谢你!! – Claire 2011-06-03 11:09:45

相关问题