实体框架,POCO,如何在数据库初始化期间向用户报告进度?

时间:2012-02-01 04:10:08

标签: .net winforms entity-framework-4.1

我正在尝试找出一种方法,以便我可以报告初始化数据库架构阶段的进度 用户通过进度条。

问题是:我不知道在哪里调用'ReportProgress'功能?我目前覆盖'种子'功能来填充初始数据库数据,我可以覆盖数据库'初始化'功能,以便在创建每个表后可以更新进度吗?

修改 根据这篇文章:Creating a Code First Database Initializer Strategy

IDatabaseInitializer及其功能InitializeDatabase的实施和 把我自己的数据库和表创建代码放在里面应该做我想要的。然后改为 在Seed函数内部,我可以在InitializeDatabase内引发事件。这应该工作,但我已经达到了一个点,我需要通过所有这些麻烦来显示数据库初始化到最终用户的进度,现在等待光标对我有效。

1 个答案:

答案 0 :(得分:1)

EF初始值设定项不会通过任何事件公开进度。

声明种子方法中某些状态发生变化时要引发的一些事件。

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

这只是概念的概述。我没试过这个