ADO.NET неправильно подключается к базе данных (несколько ошибок) - PullRequest
1 голос
/ 28 июля 2011

У меня есть приложение 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 у меня есть 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;
    }
}

Также я зарегистрировал свой фабричный контроллер в 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 требует открытого и доступного соединения. текущее состояние соединения открыто.
  • Новая транзакция не разрешена, потому что есть другие потоки работает в сеансе.
  • Элемент с таким же ключом уже добавлен.

Может быть, я использовал неправильную структуру для получения данных?

1 Ответ

0 голосов
/ 22 августа 2011

За вопрос:

Обновление: проблема решена, объект DataContext был статическим (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...