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