【问题标题】:Entity Framework Code First - Reverse Engineer实体框架代码优先 - 逆向工程师
【发布时间】:2012-12-21 09:54:17
【问题描述】:
我即将开始使用 Entity Framework Code First 开发 ASP.Net MVC 4 Web 应用程序。因为数据库已经存在,所以我使用 Code First 执行逆向工程的能力来生成我的域类。
然后我希望在我的解决方案中将这些域类放入它们自己的单独项目中,以保持它们对持久性的无知。但是,当我运行该工具对我的数据库进行逆向工程(使用 Entity Framework Power Tools)时,我发现域类已创建,但还创建了一个名为 Mapping 的文件夹,其中包含每个域类的映射类,然后使用 Fluent API映射表属性。这一切都很好。
但是,我还发现,映射类依赖于对实体框架的引用,我只是想知道这是否被认为是不好的做法?通常当我创建 POCO 类时,它们完全不了解持久性,即在该项目中根本没有对实体框架的引用。
你的想法?
谢谢。
【问题讨论】:
标签:
entity-framework
reverse-engineering
entity-framework-5
【解决方案1】:
您可以将 POCO 类保留在一个项目中,而映射保留在另一个项目中。只需添加对 POCO 类所在项目的引用即可。另一种方法是创建一个数据访问层并将映射移到那里。这样你就有了三个项目。您的主 MVC 项目、模型项目和包含映射和对 EntityFramework 的引用的数据访问层。
例如,您的解决方案可能是这样的:
1. Web User Interface (MVC)
2. Business layer
3. Unit of Work/Repository
4. Data access layer (Mapping from EF Reverse Engineering)
所有四个项目都可以访问第五个项目,域模型(来自 EF 逆向工程的模型)。您的 1 与 2 通信,2 与 3 通信,3 与 4 通信。所有这四个都引用了域模型,因此您不必在层之间执行任何类型的域模型转换。
顺便说一下,我忽略了服务层,但如果你有 web 服务或 REST,你可以将它放在另一个项目中,但我们不要过多的细节。