Entity framework 实体框架应用程序的上下文属于域还是数据访问层?
实体框架应用程序(包含映射的DbContext)的上下文是属于域还是数据访问层Entity framework 实体框架应用程序的上下文属于域还是数据访问层?,entity-framework,asp.net-mvc-3,entity,Entity Framework,Asp.net Mvc 3,Entity,实体框架应用程序(包含映射的DbContext)的上下文是属于域还是数据访问层 谢谢。我的$0.02应该由您的DI容器“拥有”(处置)。它应该由您的工作单元实现使用。在您的场景中,上下文应该只在数据访问层中使用,然后将结果传递到您的域-类似automapper的东西将上下文实体转换为域对象这完全取决于您的应用程序。有时,有一个单独的域层和它自己的域对象是有意义的。有时候不是 事实上,对于大多数应用程序,我要说的是EF实体非常适合作为域对象,直接从“域”层引用上下文并没有什么坏处。事实上,EF设计
谢谢。我的$0.02应该由您的DI容器“拥有”(处置)。它应该由您的工作单元实现使用。在您的场景中,上下文应该只在数据访问层中使用,然后将结果传递到您的域-类似automapper的东西将上下文实体转换为域对象这完全取决于您的应用程序。有时,有一个单独的域层和它自己的域对象是有意义的。有时候不是 事实上,对于大多数应用程序,我要说的是EF实体非常适合作为域对象,直接从“域”层引用上下文并没有什么坏处。事实上,EF设计时就考虑到了这一点。创建一组完全独立的域对象,其中EF实体由某个中间人层映射到其中,需要进行调整 这并不是说拥有一个独特的域层是永远不合适的。有时,例如,当您处理跨进程/应用程序边界问题时,例如当您通过WCF公开实体时,创建新的域对象(在本例中可能只是您的DataContract类)来填充实体数据是完全有意义的
但这些例子实在太少了。如果您发现自己经常这样做,那么您的应用程序的架构就太过复杂,您正成为“纯”设计范式教条的牺牲品。我认为OP的意思是数据上下文的(自动生成的)代码是否属于域层或数据访问层。可能是。很难说他是什么意思,真的。我知道DI容器会用它。我只是想知道上下文应该属于域层还是数据访问层。你能详细解释一下“拥有”是什么意思吗?这是一个模棱两可的术语。我认为“拥有”在这种情况下,意味着由谁来控制它的使用位置——那么它会在DAL或域对象层中使用吗?对于将实体映射到域对象来说,Tomapper是一个不合适的工具,因为它不理解
IQueryable
。同意,但当实际使用.FirstOrDefault()或.ToList()调用上下文时然后它就不再是可读取的了,不是吗?是的,您可以使用ToList()
来实现这一点。然而,与IQueryable投影相比,它的效率非常低。