【问题标题】:MVC3 and EF Data first: what are the best practices?MVC3 和 EF 数据优先:最佳实践是什么?
【发布时间】:2011-07-05 15:31:53
【问题描述】:

似乎 MVC3 和 EF4.1 的大部分关注点都围绕着“代码优先”——我似乎找不到任何符合以下标准的示例或教程:

  • 使用现有的 SQLServer 数据库
  • 有单独的网络和数据访问项目(我们将有多个网络应用共享相同的数据访问类)
  • 验证建议

是否存在这样的示例或教程?是否有任何记录在案的“最佳实践”来说明如何实现这一点,或者没有以这种方式构建解决方案的理由?

【问题讨论】:

    标签: entity-framework asp.net-mvc-3 entity-framework-4.1 database-first ef-database-first


    【解决方案1】:

    这是很常见的场景,这取决于您是要使用 EDMX 文件进行映射还是要在代码中定义映射(如代码优先)。

    这两种情况都可以先做数据库

    • 您将使用 Visual Studio 中的内置 EF 工具从现有数据库创建 EDMX,您将使用 DbContext T4 生成器模板来获取 POCO 类和 DbContext 派生类
    • 您将下载 EF Power Tools CTP 并使用其逆向工程功能为您生成代码映射、POCO 类和上下文

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

    无论如何,它是通过好友课程possible to add data annotations to generated classes,但如上所述,这不是一个好习惯。

    【讨论】:

    • 对于实体数据注释,双方都同意和不同意。对于诸如长度和可空性之类的简单约束,我认为实体类上的数据注释是可以接受的。否则,您创建了一个贫血域模型 (martinfowler.com/bliki/AnemicDomainModel.html),这是一种反模式。同意,视图模型有更复杂的业务场景,应该/将会有更复杂的验证要求。
    • edmx 是 web 项目的一部分,还是在它自己的类库中?我已经更新了删除注释以进行验证的问题,因为我想避免贫血的域模型。
    • 我会使用一个单独的类库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2011-06-07
    • 1970-01-01
    • 2014-11-12
    • 2018-07-17
    • 2015-07-20
    • 2011-12-03
    相关资源
    最近更新 更多