0

我正在关注一篇关于将存储库模式和工作单元模式应用于实体框架的MSDN 文章,但我被困在定制域模型和尚不存在的数据库之间的映射。

这篇文章让我创建了两个简单的 POCO,Employee并且TimeCard. 它还介绍了在其中创建通用存储库和自定义实现。(我正在使用自定义存储库,因此我可以尝试将 EF 依赖项保留在数据访问程序集中。)但是,它们在映射中的一个重要步骤上有点模糊。文章说:

有了 POCO,我们可以在 Visual Studio 中创建实体数据模型 (EDM)(参见图 1)。我们不会使用 EDM 为我们的实体生成代码。相反,我们想使用我们精心手工制作的实体。我们将仅使用 EDM 来生成我们的数据库架构并提供 EF4 将对象映射到数据库所需的元数据。

它引用的“图 1”在这里: 电火花图 1

但这就是它关于这个主题的全部内容。关于如何从 EDMX 生成 POCO,还有一个问题。Google 提供了很多关于如何生成 POCO、从数据库生成 EDMX 等的信息。但在本演练中,我们已经有了 POCO,我需要在 EDMX 中使用它们,这反过来又会生成数据库(我假设,基于其他代码优先演练)。

我在项目中添加了一个“ADO.NET 实体数据模型”,它基本上是一个空白画布。但我没有看到如何将我现有的 POCO 添加到该画布上。我是否必须在设计表面上手动重新创建它们(这在更大的域中将是一个非常重要的重复问题)?如果是这样,它们如何映射到现有的?

4

1 回答 1

1

通常,当您使用设计器时,流程是相反的——您使用设计器创建模型(或从数据库创建/更新模型),然后为您创建代码。创建的代码可以是 EF1 样式代码,其实体派生自 EntityObject 和属性等,它是使用作为 VS 一部分的单个文件生成器创建的(代码生成策略设置为“默认” ),或者可以使用创建代码T4 模板(代码生成策略设置为“无”) 在这种情况下,您需要将 T4 模板添加到您的项目中。EF 按照约定将 POCO 与 edmx 文件中的实体匹配(实体的名称必须相同,属性的名称和类型必须匹配等)。在文章中,出于某种原因,他们采取了相反的方式,这很奇怪,因为它要求您手动创建与设计器的所有实体和关系(因为设计器不知道如何从代码中创建实体)并确保满足要求因为约定(您甚至可能不知道其中一些)得到满足。但是,当您从代码开始时,更好的方法是使用 EF Code First 方法并完全跳过设计器。Code First 可以从您的代码创建数据库。它还包含迁移功能,可以让您的数据库与您的代码一起发展。http://entityframework.codeplex.com/

*名称将在支持 EF6 并适用于 Visual Studio 2012 和 Visual Studio 2013 的新版本设计器中更改

编辑以解决评论中的问题

如果您想使用 Code First,请使用 DbContext API,它是 ObjectContext API 的简化包装器。这是一个可以帮助您入门的演练。如果您有现有的数据库,您仍然可以使用 Code First - 不同之处在于您将无法使用迁移。开始使用此功能的最简单方法是使用 EF Power Tools。查看教程以了解如何执行此操作。更多帮助在这里

于 2013-07-30T23:00:16.730 回答