我在使用EF 4.0的IIS 7.5上部署了一个MVC应用程序。 EF上下文封装在整个应用程序中共享的单例中。我这样做是因为我认为应用程序需要一个上下文来管理所有会话中的CRUD功能。
这似乎工作得很好,除了我有两个困扰我的问题:
我偶尔会在数据库中找到重复的记录。注意:我不更新记录,我将旧记录标记为已删除,并将新记录写入数据库。
有时,EF会丢失SQL连接,导致整个应用程序崩溃,迫使我回收应用程序池。
这些问题是否可能是由共享上下文引起的?最好不要将单例模式用于EF的上下文?使用单例是否会为所有用户的所有Ajax请求创建单点故障?
感谢任何指导...
public class SharedNHREntitiesContext
{ 私人只读NHREntities _context;
// Static members are lazily initialized.
// .NET guarantees thread safety for static initialization.
private static readonly SharedNHREntitiesContext instance = new SharedNHREntitiesContext();
// Make the constructor private to hide it.
// This class adheres to the singleton pattern.
private SharedNHREntitiesContext()
{
// Create the ObjectContext.
_context = new NHREntities();
}
// Return the single instance of the ClientSessionManager type.
public static SharedNHREntitiesContext Instance
{
get
{
return instance;
}
}
public NHREntities Context
{
get
{
return _context;
}
}
}
答案 0 :(得分:0)
只是为了跟进:我从代码中删除了单例EF上下文。自从我这样做以来,我在本周没有任何错误......所以,在MVC控制器的调用中,似乎单个上下文不是一个好主意。
话虽如此,我仍然偶尔会遇到重复的行,所以我仍然有一些问题要解决,不涉及单身人士。
感谢所有帮助我解决此问题的人。