Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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/4/jsp/3.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
.net 如何在不同的应用程序层上将其他实体作为子实体处理_.net_Entity Framework - Fatal编程技术网

.net 如何在不同的应用程序层上将其他实体作为子实体处理

.net 如何在不同的应用程序层上将其他实体作为子实体处理,.net,entity-framework,.net,Entity Framework,如果我分离了上下文,我将失去所有关系,如果我没有分离,我将无法稍后保存,因为实体的上下文已被释放 这是我的代码示例 Public Sub Save() Using ctx As HMIEntities = New HMIEntities ctx.AttachUpdated(Me) //I use this extension method that works fine if I detach in the get method and the entity has no

如果我分离了上下文,我将失去所有关系,如果我没有分离,我将无法稍后保存,因为实体的上下文已被释放

这是我的代码示例

Public Sub Save()
    Using ctx As HMIEntities = New HMIEntities
        ctx.AttachUpdated(Me) //I use this extension method that works fine if I detach in the get method and the entity has no properties as entities
        ctx.SaveChanges()
    End Using
End Sub

Public Shared Function GetByID(ByVal ID As Integer) As Page
    Dim retval As Page
    Using ctx As HMIEntities = New HMIEntities                        
        retval = ctx.PageSet.Include("PageContent").FirstOrDefault(Function(p) p.Slug = ID)            
    End Using
    Return retval
End Function
这是不可能的吗?

在请求开始时创建上下文(直接或间接),并在请求结束时进行处理。大多数人使用带有专用HTTP处理程序的DI容器来实现这一点,但如果您不想这样做,可以在Global.asax.cs中实现。就我个人而言,我使用MVC,所以我在控制器工厂中使用它


然后,任何需要上下文的内容都可以从DI容器(或通过构造函数注入)获得,并且每个请求都有一个上下文。

您使用的是EF 1(3.5)还是EF 4?这并非不可能,但取决于您的应用程序(例如,对于web应用程序,通常每个请求使用一个上下文),你还没有告诉我们关于你的应用程序的任何信息。它是一个web应用程序。对不起,我说得很模糊。codebehind将根据在树视图中选择的页面创建页面对象。然后,用户可以更改页面属性。在创建对象和调用save之间可能会发生许多回发。以上是我的部分页面类的一个片段。谢谢Craig,我不熟悉DI容器,所以我会向Google询问更多关于这种方法的信息。如果我正确理解您关于使用Global.asax的想法,我想我仍然会遇到同样的问题。需要发出一个请求来获取对象,还需要发出另一个请求来提交更改,从而创建一个新的/不同于用于获取数据的上下文的上下文。对吗?EF新手,请原谅我的愚蠢。谷歌的短语是“依赖注入”和“控制反转”。最重要的是每个请求有一个上下文。也就是说,对于每个单独的请求,所有需要使用ObjectContext的代码都将共享相同的ObjectContext。您可以在此处阅读有关此想法的一些讨论:对于DI,请参见此处: