我即将开始使用Entity Framework Code First开发ASP.Net MVC 4 Web应用程序。因为数据库已经存在,所以我使用Code First执行逆向工程的能力来生成我的域类。
我希望在我的解决方案中将这些域类放在他们自己的独立项目中,以保持持久性无知。但是,当我运行该工具来对我的数据库进行逆向工程时(使用Entity Framework Power Tools),我发现创建了域类,但是还创建了一个名为Mapping的文件夹,其中包含每个域类的映射类,然后使用Fluent API映射表属性。这一切都很好。
但是,我也发现,映射类依赖于对实体框架的引用,我只是想知道这被认为是不好的做法吗?通常当我创建POCO类时,它们完全是持久性无知的,即在该项目中根本没有引用实体框架。
你的想法?
感谢。
答案 0 :(得分:5)
您可以将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)
所有四个项目都可以访问第五个项目,Domain Model(来自EF Reverse Engineering的模型)。您的1与2通信,2与3通信,3与4通信。所有这四个都引用了域模型,因此您不必在层之间执行任何类型的域模型转换。
顺便说一句,我忽略了服务层,但是如果你有Web服务或REST,你可以将它放在另一个项目中,但是我们不要涉及太多的细节。