Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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 实体框架-web应用中的作用域上下文_.net_Asp.net_Entity Framework_Static_Scope - Fatal编程技术网

.net 实体框架-web应用中的作用域上下文

.net 实体框架-web应用中的作用域上下文,.net,asp.net,entity-framework,static,scope,.net,Asp.net,Entity Framework,Static,Scope,我在一个web应用程序中为实体框架实现了一个简单的存储库模式 我有几个存储库,它们都是base的子类,base中有一些常用的方法 底座看起来像这样 public class BaseRepository<TEntity> : IRepository<TEntity> { protected readonly RedirectsEntities Context; public BaseRepository() { Context =

我在一个web应用程序中为实体框架实现了一个简单的存储库模式

我有几个存储库,它们都是base的子类,base中有一些常用的方法

底座看起来像这样

public class BaseRepository<TEntity> : IRepository<TEntity>
{
    protected readonly RedirectsEntities Context;

    public BaseRepository()
    {
        Context = new RedirectsEntities();
    }
然后,我的基本存储库构造函数将如下所示:

public BaseRepository()
{
     Context = DataContext.DbEntities;
}
因此,这似乎解决了我的问题,但我担心的是,知觉的范围现在是不正确的


有人对此发表评论吗?

在web应用程序中,最常见的解决方案是为每个http请求确定上下文范围。您可以在请求开始时初始化上下文,并在请求结束时处理它。在请求过程中,您可以将上下文保存在会话状态

如果使用控制反转(InversionofControl,IoC)容器,则可以让容器在请求期间保存上下文并将其提供给存储库

更新


如果您没有使用IoC,我会在请求开始时创建datacontext,并将其置于会话状态。然后,我将更改基本存储库的构造函数,以datacontext的实例作为参数。然后,每次创建存储库时,都会从会话中获取上下文并将其提供给存储库。在请求结束时,您可以从会话中获取上下文并对其进行处理。这样,您的所有存储库将在一个请求上共享相同的上下文。

谢谢您的回答。我没有使用IoC容器。只是做可怜人的依赖性注入(哦,太可惜了!)那么在这种情况下,我会将DataContext作为存储库中的一个属性吗?在创建存储库实例之前,是否新建一个DataContext?然后在存储库上设置datacontext属性?谢谢…这是一篇关于每个请求范围的非常好的文章(尽管使用Lightspeed而不是EF)
public BaseRepository()
{
     Context = DataContext.DbEntities;
}