关于将存储库模式和工作单元模式应用于实体框架,我正在关注MSDN article,但我坚持定制域模型和尚未存在的模型之间的映射数据库中。
本文让我创建了两个简单的POCO,Employee
和TimeCard
。它还介绍了在其中创建通用存储库和自定义实现。 (我正在使用自定义存储库,因此我可以尝试在数据访问程序集中保留EF依赖项。)但是,它们对映射中的一个重要步骤进行了釉化。文章说:
在POCO到位的情况下,我们可以在Visual Studio中创建实体数据模型(EDM)(参见图1)。我们不会使用EDM为我们的实体生成代码。相反,我们想要使用我们亲手制作的实体。我们将仅使用EDM生成数据库模式,并提供EF4将对象映射到数据库所需的元数据。
它引用的“图1”在这里:
但这就是关于这个主题的全部内容。关于如何从EDMX生成POCO还有一个方面。有很多关于如何生成POCO,从数据库生成EDMX等的信息。但是在本演练中我们已经有了POCO,我需要在EDMX中使用它们,这反过来会生成数据库(我假设,基于其他代码优先的演练。
我在项目中添加了“ADO.NET实体数据模型”,基本上是一个空白画布。但我没有看到如何将现有的POCO添加到该画布。我是否必须在设计界面上手动重新创建它们(在较大的域中这将是一个非常重要的重复问题)?如果是这样,他们如何映射到现有的?
答案 0 :(得分:1)
通常,当您使用设计器时,流程正好相反 - 您使用设计器创建模型(或从数据库创建/更新模型),然后为您创建代码。创建的代码可以是EF1样式代码,其中包含从EntityObject派生的实体和属性等,这些代码是使用单个文件生成器创建的,该单个文件生成器是VS的一部分(代码生成策略设置为“默认”)或代码可以使用T4模板创建(代码生成策略设置为“无”),在这种情况下,您需要将T4模板添加到项目中。 EF按照惯例将POCO与edmx文件中的实体进行匹配(实体名称必须相同,属性的名称和类型必须匹配等)。在文章中出于某种原因,它们采用了相反的方式,这很奇怪,因为它要求您手动创建所有实体和与设计器的关系(因为设计人员不知道如何从代码中创建实体)并确保要求对于约定(你可能甚至不知道其中一些)都符合。但是,当您从代码开始时,更好的方法是使用EF Code First方法并完全跳过设计器。 Code First可以从您的代码创建数据库。它还包含迁移功能,允许您的数据库与代码一起发展。最后(您似乎使用Visual Studio 2010)可以使用EF6,它允许使用以前只能在.NET Framework 4.5上使用的所有优点在.NET Framework 4上使用。有关详细信息,请参阅此处:{{3} }
*名称将在支持EF6的新版本设计器中更改,并与Visual Studio 2012和Visual Studio 2013一起使用
编辑以解决评论中的问题
如果您想使用Code First,请使用DbContext API,它是ObjectContext API的简化包装器。这是一个http://entityframework.codeplex.com/,可以帮助您入门。 如果您有现有数据库,您仍然可以使用Code First - 不同之处在于您将无法使用迁移。开始使用它的最简单方法是使用EF Power Tools。看看walkthrough教程,看看如何做到这一点。 更多帮助this