2011-07-28 54 views
1

我有一个ASP.NET MVC 3应用程序,并在我的项目中使用ADO.NET实体数据模型。ADO.NET没有正确连接到数据库(多个错误)

为了访问数据I使用中间类(DataManager的):

public class DataManager 
{ 
    private static mrhomeEntities _dataContext; 

    public DataManager() 
    { 
     _dataContext = new mrhomeEntities(); 
    } 

    private OptionStorageRepository _optionStorageRepository; 

    public OptionStorageRepository OptionStorage 
    { 
     get { return _optionStorageRepository ?? (_optionStorageRepository = new OptionStorageRepository(_dataContext)); } 
    } 
} 

在OptionStorageRepository I类具有1种方法,它返回一个选项列表:我有超过

public IQueryable<OptionStorage> List() 
    { 
     return _dataContext.OptionStorage; 
    } 

这样的类15(具有这种结构)来获取和编辑数据库中的数据。

不过我有我的ControllerFabrick,在那里我通过DataManager类的一个新对象:

public class ControllerFabricFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
    { 
     return Activator.CreateInstance(controllerType, new DataManager()) as IController; 
    } 
} 

而且我注册了我的控制器fabrick在Global.asax中是这样的:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
     ControllerBuilder.Current.SetControllerFactory(new ControllerFabricFactory()); 
    } 

而在所有控制器我在构造函数中使用此参数并在我的动作方法中使用:

public class HomeController : Controller 
{ 
    private readonly DataManager dm; 

    public HomeController(DataManager dm) 
    { 
     this.dm = dm; 
    } 
    [HttpGet] 
    public ActionResult Main() 
    { 
     Page page = dm.Page.Details(mainPageName); 

     PageNews pageNews = new PageNews(); 
     pageNews.page = page; 
     pageNews.NewsList = dm.News.List(5); 
     pageNews.PopularProject = dm.Project.GetPopularProject(); 

     if (pageNews.PopularProject != null) 
     { 
      var list = pageNews.PopularProject.ProjectPictures.Where(p => p.ProjectPictureTypes.Id == 1).ToList(); 
      if (list.Count > 0) 
      { 
       ViewData["img"] = list[0].ThumbPath; 
      } 
     } 
     foreach (var item in dm.Page.List()) 
     { 
      ViewData[item.Name] = item.ShortPageText; 
     } 
     ViewData["projects"] = dm.Project.GetMainPageProjects(); 
     ViewData["MainText"] = dm.Page.Details("maintext").PageText; 
     return View(pageNews); 
    } 
} 

我的问题:

当我测试的网络浏览器应用程序,我有奇怪的错误,包含有关连接到数据库或检索数据信息,下面我有我的错误的集合:

  • 的连接是不关闭。连接的当前状态为 连接。
  • 无数据存在时尝试读取无效
  • ExecuteReader需要一个开放且可用的Connection。 连接的当前状态已打开。
  • 新交易是不允许的,因为会话中还有其他线程 正在运行。
  • 已添加具有相同密钥的项目。

也许我使用错误的结构来获取数据?

+2

嗨@IICuX - 当你有机会,请发表此项决议案作为回答,您可以最终接受 - 这将帮助其他人认识到这个问题具有解决方案。 –

回答

0

每一个问题:

更新:问题解决,反对DataContext的是静态的(