C# Ninject/Entity Framework-同时处理请求时出错

C# Ninject/Entity Framework-同时处理请求时出错,c#,asp.net-mvc,entity-framework,ninject,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Ninject,Asp.net Mvc 5,我已经用MVC5/EF6创建了一个站点,并使用Ninject作为DI容器将其绑定在一起 除了在一个页面上,我同时进行了两个ajax调用之外,所有的工作都很好 控制器/存储库会抛出各种错误,例如: “mscorlib.dll中发生类型为'System.Data.Entity.Core.EntityException'的首次意外异常。其他信息:基础提供程序在打开时失败。” 对api的一个调用总是有效的,第二个调用是间歇性的。如果我直接在控制器中创建datacontext,那么一切正常,因此错误一定与

我已经用MVC5/EF6创建了一个站点,并使用Ninject作为DI容器将其绑定在一起

除了在一个页面上,我同时进行了两个ajax调用之外,所有的工作都很好

控制器/存储库会抛出各种错误,例如:

“mscorlib.dll中发生类型为'System.Data.Entity.Core.EntityException'的首次意外异常。其他信息:基础提供程序在打开时失败。”

对api的一个调用总是有效的,第二个调用是间歇性的。如果我直接在控制器中创建datacontext,那么一切正常,因此错误一定与Ninject有关,但我无法确定需要做什么来对其进行排序。将范围更改为Transient/Thread只会更改错误

非常感谢您的帮助

以下是我的(已编辑)代码:

从Global.asax应用程序_Start()调用

var context=new myDataContext();
//低谷胜
IKernel kernel=新的标准内核();
SetResolver(新的NinjectDependencyResolver(内核));
GlobalConfiguration.Configuration.DependencyResolver
=新的App_Start.NinjectResolver(内核);
kernel.Bind()
.至()
//.InTransientScope()
//.InThreadScope()
.InRequestScope()
.带有构造函数参数(“上下文”,上下文);
Api控制器

  public class MyApiController : ApiController
  {
    IRepository<MyRepository> _repository;

    public EMAAFController(IRepository<MyRepository> repository)
    {
     _repository = repository;
    }



    public IEnumerable<Models.MyClass> Get(int id)
    {
      var itemToReturn = _repository.GetAll().Where(i => i.id == id).ToList();

      return itemToReturn;
    }
  }
公共类MyApicController:ApicController
{
i存储库;
公共EMAAFController(IRepository存储库)
{
_存储库=存储库;
}
公共IEnumerable Get(int-id)
{
var itemToReturn=_repository.GetAll().Where(i=>i.id==id.ToList();
返回项目返回;
}
}

你做错了。绑定是在应用程序启动时完成的,在您的情况下,创建上下文实例并将其路径设置为绑定

将您的绑定更改为

kernel.Bind<myDataContext>().ToSelf().InRequestScope();

kernel.Bind<IRepository<Models.MyClass>>().To<MyRepository>().InRequestScope()   
kernel.Bind().ToSelf().InRequestScope();
kernel.Bind()到()InRequestScope()中

因此,当ninject解析您的存储库时,它将看到带有输入参数myDataContext的构造函数,并了解如何获取上下文

谢谢您的回答。看起来这是正确的,但我仍然不清楚datacontext的实例将在哪里创建。请你给我解释一下好吗。我尝试了大约20分钟的谷歌搜索,但仍然无法实现神奇的效果。别理我。我已经解决了。除了您的观点之外,我的构造函数还尝试在DbContext中使用,而不是在接口或特定上下文中使用。这使Ninject无法解析绑定。在接受MyDataContext的存储库中有一个构造函数修复了它。谢谢你的帮助如果任何搜索者找到这篇文章并阅读了我之前的评论,我也发现这篇文章很有帮助-
kernel.Bind<myDataContext>().ToSelf().InRequestScope();

kernel.Bind<IRepository<Models.MyClass>>().To<MyRepository>().InRequestScope()