4

只是一个快速的问题,Fluent API 在功能方面是否可以替代 Data Annotations?Fluent API 中没有包含哪些 Data Annotations 功能?

我想使用 Fluent API,因为关注点分离(在我的模型和持久性之间),约定优于配置(映射定义在一个地方DbContext.OnModelCreating()但不是在每个模型属性中),我想使用VS 2010 层验证来确保我的 POCO 类永远不会依赖于 EF,但是如果我从源中完全删除数据注释,我会错过什么?

4

2 回答 2

1

我想知道这是因为我希望我的 POCO 类与 EF 完全隔离(我的存储库和 UoW 模式使 kt 可以迁移到 NHibernate)。

Fluent API > Data Annotations,即 Fluent API 具有比 Data Annotations更多的功能,对映射表和创建关系很有用。然而,Fluent API 并没有很好的标签和验证,@Html.LabelFor以及@Html.EditorFor使用[Display(Name:=...)],[DisplayFormat(DataFormatString=...)][Required(ErrorMessage=...)]。这就是让我头疼的地方。

现在发现了这样的想法:

  1. 在数据层使用 Fluent API,所以我的模型真的是 POCO 类(POCO 项目)和 dll 可以在 WCF 和其他将订阅此服务的项目中使用。

  2. 使用 ViewModel 的数据注释。由于这仅在 UI 层内,并且 ViewModel 从未共享给除 MVC View 之外的其他项目,因此我不介意拥有 Data Annotation 属性。

  3. 将 (1) 中创建的约束重做到 (2) 中,如[Required][MaxLength]。我发现有些人说值得重复和改变 DRY 原则,因为 ViewModel 和域模型应该分开并且彼此不相关,即使我认为它们MaxLength之间存在一些关联(只是一个小重复,对于 n 来说应该没问题-tier 架构 + 我可以使用静态类和 const 使双方的长度相同)。

于 2012-10-21T22:04:51.867 回答
1

FluentValidation.NET提供了数据注释的全部功能,甚至更多。因此,如果您使用 FV 而不是数据注释,那么您绝对不会错过任何东西。

于 2012-10-19T06:07:40.750 回答