Entity Framework, POCO, как сообщить пользователю о прогрессе во время инициализации БД? - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь найти способ, чтобы я мог сообщить о прогрессе на этапе инициализации схемы БД. пользователю через индикатор выполнения.

Проблема в том, что я не знаю, где вызывать функцию ReportProgress? В настоящее время я перезаписываю функцию 'Seed' для заполнения начальных данных БД. Могу ли я перезаписать функцию Database 'Initialize', чтобы прогресс мог обновляться после создания каждой таблицы?

EDIT: Согласно этой статье: Создание стратегии инициализации базы данных Code First

Реализация IDatabaseInitializer и ее функции InitializeDatabase и положить мою собственную базу данных и таблицы создания кода внутри должно делать то, что я хочу. Тогда вместо внутри Seed функции, я мог бы вызывать события внутри InitializeDatabase. Это должно сработать, но я дошел до того, что мне нужно идти, хотя все эти проблемы, чтобы показать прогресс инициализации БД для конечного пользователя, теперь у меня работает ждущий курсор.

1 Ответ

1 голос
/ 01 февраля 2012

Инициализаторы EF не отображают ход выполнения каких-либо событий.

Объявите некоторые события, которые вы хотите инициировать при изменении состояния в методе seed.

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
    public event EventHandler<SeedStateChangeEventArgs> SeedStateChange;

    protected virtual void Seed(MyContext context)
    {
       // create a table
       OnSeedStateChange(new SeedStateChangeEventArgs { Table = "Foo" });

       // create another table
       OnSeedStateChange(new SeedStateChangeEventArgs { Table = "Bar" });
    }

    protected virtual void OnSeedStateChange(SeedStateChangeEventArgs args)
    {
         // raise event here
    }
}

Затем в вашем Form

var initializer = new MyInitializer();
initializer.SeedStateChange += MyStateChangeHandler;
Database.SetInitializer(initializer);

var context = new MyContext();
context.Database.Initialize(false);

Это просто набросок концепции.Я не пробовал это

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