我正在尝试找出一种方法,以便我可以报告初始化数据库架构阶段的进度 用户通过进度条。
问题是:我不知道在哪里调用'ReportProgress'功能?我目前覆盖'种子'功能来填充初始数据库数据,我可以覆盖数据库'初始化'功能,以便在创建每个表后可以更新进度吗?
修改 根据这篇文章:Creating a Code First Database Initializer Strategy
IDatabaseInitializer
及其功能InitializeDatabase
的实施和
把我自己的数据库和表创建代码放在里面应该做我想要的。然后改为
在Seed
函数内部,我可以在InitializeDatabase
内引发事件。这应该工作,但我已经达到了一个点,我需要通过所有这些麻烦来显示数据库初始化到最终用户的进度,现在等待光标对我有效。
答案 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);
这只是概念的概述。我没试过这个