2011-07-28 52 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的是靜態的(