3

我将 Ninject 与 MVC 应用程序一起使用,也使用 EF4.1 Code First。尝试测试是否可以从两个不同的浏览器实例发出请求时遇到问题。

基本上,如果我大致同时在两个浏览器上登录,我会收到一个错误消息,告诉我“在创建模型时无法使用上下文”。

现在,我的第一个假设是我有冲突的实例,因此没有正确设置上下文的范围。

我有一个包含必要表的基类上下文,我从中继承。然后我有一个注入的工厂,并在我请求我的存储库时负责实际创建上下文。

public class ContextFactory
{
     TContext Create<TContext>( ) 
}

我需要这样做,因为我的连接字符串是在运行时决定的,所以我不能只使用 web.config 中包含的连接字符串

public class Repository : BaseRepository<MyObject>
{
   public Repository(IContextFactory factory) : base(factory) 
   {
   }
}

这个想法是当我需要我的存储库时,我注入存储库,它有自己的注入,创建它的上下文,我可以提供一些默认实现。

我的下一个担心是我没有正确关闭或销毁某些实例。我已经使用其他人的示例在会话范围内设置某些对象数据,但大多数我尝试使用 OnRequestScope。

4

1 回答 1

4

听起来您ContextFactory需要绑定InRequestScope

Bind<IContextFactory>().To<ContextFactory>().InRequestScope();

您收到的错误似乎表明这两个请求(来自每个浏览器实例的一个请求)都试图使用您的 EF 上下文的完全相同的实例,这当然不起作用。

于 2011-05-12T21:32:44.453 回答