При использовании Database.SetInitializer в Global.Asax ApplciaitonStart возникает ошибка «Уже открыт DataReader ...» - PullRequest
0 голосов
/ 13 сентября 2011

Мне интересно, если у кого-то еще была проблема с запуском инициализатора БД из глобального asax?

У меня есть это в ApplicationStart:

 Database.SetInitializer(new MyInitializer());

Это работает нормально, послечто, как только мое приложение запустилось, я пробую метод входа, который я создал в моих службах.Это терпит неудачу, когда это пытается открыть контекст.

Мое тестовое приложение настроено почти так же, и у него нет проблем.

Есть мысли?

Обновление: Я попытался добавитьMultipleActiveResultSets = True, и теперь я получаю эту ошибку: при открытии произошел сбой основного поставщика.

Обновление 2: Что ж, получается, что мое приложение загружается, пока инициализатор все еще завершает работу.Вот почему я получаю эти ошибки.Итак, я понял, что часть приложения загружается, а затем она должна запросить что-то из БД (в этот момент она создала БД и запустила ее).В этот момент часть приложения загрузилась, но вы не знаете, что инициализатор все еще работает.

1 Ответ

0 голосов
/ 13 сентября 2011

Как мне грустно в моих обновлениях, БД не создавалась до тех пор, пока большая часть приложения уже не запустилась. Он все еще работал, хотя, как пользователь, вы бы этого не знали. Поэтому я создал проект инициализации и добавил этот класс:

public static class InitializeAndSeed
    {
        public static void Initialize()
        {
            Database.SetInitializer(new MyContextInitializer());

            using (var db = new MyContext())
            {
                db.Database.Initialize(false);
            }
        }
    }

В моем Applicaiton_Start () я вызываю InitializeAndSeed.Initialize (). Работал отлично.

Эта статья помогла мне понять это.

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