ADO.NET没有正确连接到数据库(多个错误)

时间:2011-07-28 16:09:01

标签: c# asp.net sql-server asp.net-mvc-3 ado.net

我有一个ASP.NET MVC 3应用程序,在我的项目中我使用ADO.NET实体数据模型。

为了访问数据我使用中间类(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类中,我有一个返回选项列表的方法:

    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;
    }
}

我也在Global.asax中注册了我的控制器fabrick:

    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需要一个开放且可用的连接。该 连接的当前状态是打开的。
  • 不允许新事务,因为还有其他线程 在会议中运行。
  • 已添加具有相同键的项目。

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

1 个答案:

答案 0 :(得分:0)

每个问题:

  

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