我的问题很简单:在MVC3项目的Web应用程序中,将.edmx
文件放置在模型文件夹中是否是一种好的做法?
我的问题很简单:在MVC3项目的Web应用程序中,将.edmx
文件放置在模型文件夹中是否是一种好的做法?
我的答案很简单,不要将表现层(整个MVC应用程序)与数据访问逻辑和数据建模混淆。
在Visual Studio解决方案中至少有4个项目,从底层到顶层:
1 - ProjectName.Interfaces(类库,实体的接口);
2 - ProjectName.DAL(类库,唯一一个允许知道EF被使用的项目,POCO实体使用另一个文件实现项目1的接口,其中重新声明相同的对象使用部分类...);
3 - ProjectName.BL(类库,业务逻辑,引用上述两个项目1和2);
4 - ProjectName.Web(ASP.NET MVC应用程序,表现层,引用两个项目1和3但不是2);
这样做当然是为了简化事情,根据我的经验,这是一个坚固的设计,对于非常小的项目来说有点过度设计,但在长期内会得到回报。
在我看来,MVC中的M,即模型,不是数据模型,不是EF,也不是ORM绑定到特定的数据库引擎。
当然,这个答案是主观的,并基于我的个人经验;-)
我完全同意Davide的观点,我只想补充一点,你还应该考虑使用POCO模板生成POCO对象,而不是返回实体框架对象到另一层,因为这会对实体框架产生依赖。
如果你不将其分离到一个单独的项目中,那么在某个不可避免的时刻,你的直接数据访问代码最终会被抛到Web代码中。我经常看到这种情况(我们所有人都曾经有过类似的错误)。
我认为这并不重要。
我使用CodeFirst,所以我的DbContext类放在Model文件夹中。
实际上,EDMX仅用于代码生成,除此之外它没有太多作用,它不会被部署/发布到服务器上等,所以它的位置并不重要。如果您想要,您可以为EDMX创建另一个文件夹,或将其放在您要求的Model文件夹中。