MVC3和EF Data First:最佳实践是什么?

9
似乎MVC3和EF4.1的大部分关注点都在“代码优先”上 - 我似乎找不到符合以下标准的示例或教程:
  • 使用现有的SQLServer数据库
  • 为Web和数据访问使用单独的项目(我们将有多个Web应用程序共享相同的数据访问类)
  • 验证建议
这样的示例或教程存在吗?是否有任何记录下来的“最佳实践”来完成这个问题,或者没有以这种方式结构化解决方案的理由?
1个回答

5
这是一个很常见的场景,取决于您想要使用EDMX文件进行映射还是在代码中定义映射(例如Code First)。
这两种情况都可以作为数据库优先完成。
您可以在Visual Studio中使用内置EF工具从现有数据库创建EDMX,并使用DbContext T4生成器模板获取POCO类和DbContext派生类。
您还可以下载 EF Power Tools CTP ,并使用其反向工程功能为您生成代码映射,POCO类和上下文。

这两种方法都不会添加数据注释。实体上的数据注释不应用于客户端验证(这是不好的做法),除非您正在进行非常简单的应用程序。通常,您的视图具有一些更高级的期望和验证,而视图中的验证可能与实体上的验证不同。例如,插入视图和更新视图可能需要不同的验证,而无法使用实体上的单个数据注释集来执行此操作。因此,您应该将数据注释移动到专门的视图模型中进行验证,并将实体转换为视图模型,反之亦然(您可以使用 AutoMapper 来简化此过程)。

无论如何,可以通过伙伴类向生成的类添加数据注释,但正如前面提到的那样,这不是一个好的做法。


对于实体数据注释,人们既有同意的观点,也有不同意的观点。对于像长度和可空性这样的简单约束条件,我认为在实体类上使用数据注释是可以接受的。否则,你就会创建一个贫血的领域模型(http://martinfowler.com/bliki/AnemicDomainModel.html),这是一种反模式。同意的是,视图模型具有更复杂的业务场景,并且应该/将会有更复杂的验证要求。 - Jeff
edmx是Web项目的一部分还是它自己的类库?我已更新问题以删除验证注释,因为我想避免贫血领域模型。 - chris
我会使用一个单独的类库。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接