Cal*_*aNN 5 c# asp.net-mvc fluentvalidation data-annotations asp.net-mvc-4
快速问一下,就功能而言,Fluent API 是否可以替代数据注释?数据注释中有哪些功能未包含在 Fluent API 中?
我想使用 Fluent API,因为关注点分离(在我的模型和持久性之间)、约定优于配置(在一个地方定义映射,DbContext.OnModelCreating()但不是在每个模型属性),并且我想使用VS 2010 层验证来确保我的 POCO 类永远不会依赖于 EF,但是如果我从源中完全删除数据注释,我会错过什么?
我想知道这是因为我希望我的 POCO 类完全与 EF 隔离(我的存储库和 UoW 模式使 kt 可以迁移到 NHibernate)。
Fluent API > 数据注释,即 Fluent API比数据注释具有更多功能,并且对于映射表和创建关系很有用。然而, Fluent API 没有使用,和来对@Html.LabelFor和进行良好的标签和验证。这就是让我头疼的事情。@Html.EditorFor[Display(Name:=...)][DisplayFormat(DataFormatString=...)][Required(ErrorMessage=...)]
现在发现的想法是:
在数据层中使用 Fluent API,因此我的模型实际上是 POCO 类(POCO 项目),并且 dll 可以在 WCF 和其他将订阅此服务的项目中使用。
使用 ViewModel 的数据注释。由于这仅在 UI 层内,并且 ViewModel 从未与除 MVC View 之外的其他项目共享,因此我不介意具有数据注释属性。
将 (1) 中创建的约束重做到 (2) 中,例如[Required]和[MaxLength]。我发现有些人说值得重复和改变 DRY 原则,因为 ViewModel 和域模型应该分开并且彼此不相关,即使我认为它们之间MaxLength有一些相关性(只是一个小的重复,对于 n 来说应该没问题) -层架构+我可以使用静态类和const来使两侧的长度相同)。