只是一个快速的问题,Fluent API 在功能方面是否可以替代 Data Annotations?Fluent API 中没有包含哪些 Data Annotations 功能?
我想使用 Fluent API,因为关注点分离(在我的模型和持久性之间),约定优于配置(映射定义在一个地方DbContext.OnModelCreating()
但不是在每个模型属性中),我想使用VS 2010 层验证来确保我的 POCO 类永远不会依赖于 EF,但是如果我从源中完全删除数据注释,我会错过什么?
只是一个快速的问题,Fluent API 在功能方面是否可以替代 Data Annotations?Fluent API 中没有包含哪些 Data Annotations 功能?
我想使用 Fluent API,因为关注点分离(在我的模型和持久性之间),约定优于配置(映射定义在一个地方DbContext.OnModelCreating()
但不是在每个模型属性中),我想使用VS 2010 层验证来确保我的 POCO 类永远不会依赖于 EF,但是如果我从源中完全删除数据注释,我会错过什么?
我想知道这是因为我希望我的 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=...)]
。这就是让我头疼的地方。
现在发现了这样的想法:
在数据层使用 Fluent API,所以我的模型真的是 POCO 类(POCO 项目)和 dll 可以在 WCF 和其他将订阅此服务的项目中使用。
使用 ViewModel 的数据注释。由于这仅在 UI 层内,并且 ViewModel 从未共享给除 MVC View 之外的其他项目,因此我不介意拥有 Data Annotation 属性。
将 (1) 中创建的约束重做到 (2) 中,如[Required]
和[MaxLength]
。我发现有些人说值得重复和改变 DRY 原则,因为 ViewModel 和域模型应该分开并且彼此不相关,即使我认为它们MaxLength
之间存在一些关联(只是一个小重复,对于 n 来说应该没问题-tier 架构 + 我可以使用静态类和 const 使双方的长度相同)。
FluentValidation.NET提供了数据注释的全部功能,甚至更多。因此,如果您使用 FV 而不是数据注释,那么您绝对不会错过任何东西。