Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架应用程序的上下文属于域还是数据访问层?_Entity Framework_Asp.net Mvc 3_Entity - Fatal编程技术网

Entity framework 实体框架应用程序的上下文属于域还是数据访问层?

Entity framework 实体框架应用程序的上下文属于域还是数据访问层?,entity-framework,asp.net-mvc-3,entity,Entity Framework,Asp.net Mvc 3,Entity,实体框架应用程序(包含映射的DbContext)的上下文是属于域还是数据访问层 谢谢。我的$0.02应该由您的DI容器“拥有”(处置)。它应该由您的工作单元实现使用。在您的场景中,上下文应该只在数据访问层中使用,然后将结果传递到您的域-类似automapper的东西将上下文实体转换为域对象这完全取决于您的应用程序。有时,有一个单独的域层和它自己的域对象是有意义的。有时候不是 事实上,对于大多数应用程序,我要说的是EF实体非常适合作为域对象,直接从“域”层引用上下文并没有什么坏处。事实上,EF设计

实体框架应用程序(包含映射的DbContext)的上下文是属于域还是数据访问层


谢谢。

我的$0.02应该由您的DI容器“拥有”(处置)。它应该由您的工作单元实现使用。

在您的场景中,上下文应该只在数据访问层中使用,然后将结果传递到您的域-类似automapper的东西将上下文实体转换为域对象

这完全取决于您的应用程序。有时,有一个单独的域层和它自己的域对象是有意义的。有时候不是

事实上,对于大多数应用程序,我要说的是EF实体非常适合作为域对象,直接从“域”层引用上下文并没有什么坏处。事实上,EF设计时就考虑到了这一点。创建一组完全独立的域对象,其中EF实体由某个中间人层映射到其中,需要进行调整

这并不是说拥有一个独特的域层是永远不合适的。有时,例如,当您处理跨进程/应用程序边界问题时,例如当您通过WCF公开实体时,创建新的域对象(在本例中可能只是您的DataContract类)来填充实体数据是完全有意义的


但这些例子实在太少了。如果您发现自己经常这样做,那么您的应用程序的架构就太过复杂,您正成为“纯”设计范式教条的牺牲品。

我认为OP的意思是数据上下文的(自动生成的)代码是否属于域层或数据访问层。可能是。很难说他是什么意思,真的。我知道DI容器会用它。我只是想知道上下文应该属于域层还是数据访问层。你能详细解释一下“拥有”是什么意思吗?这是一个模棱两可的术语。我认为“拥有”在这种情况下,意味着由谁来控制它的使用位置——那么它会在DAL或域对象层中使用吗?对于将实体映射到域对象来说,Tomapper是一个不合适的工具,因为它不理解
IQueryable
。同意,但当实际使用.FirstOrDefault()或.ToList()调用上下文时然后它就不再是可读取的了,不是吗?是的,您可以使用
ToList()
来实现这一点。然而,与IQueryable投影相比,它的效率非常低。