通过以编程方式运行实体框架数据库第一脚本来初始化数据库

时间:2013-11-29 11:08:16

标签: c# entity-framework initialization unit-of-work ef-database-first

我正在尝试使用UnitOfWork Pattern创建一个存储库,其中包含一个实体框架数据库第一个项目,我可以在将来的解决方案中重用该项目。想要做的是,从另一个项目,以编程方式执行所有表脚本(或指定文件中的脚本)来创建和可能为数据库设定种子。

是否有任何内置工具使用实体框架来执行此操作?或者是将每个脚本命名/硬编码专门运行?或者其他任何方法吗?我首先无法使用数据库找到任何要做的事情,只能先使用代码。

以下是我对上下文的看法:

public class UnitOfWork : IUnitOfWork
{
    private DbContext _dbContext;

    public UnitOfWork()
    {
        _dbContext = new DBContext();
        InitializeDatabase();
    }

    //Repositories/savechanges etc.

    private void InitializeDatabase()
    {
        if(!_dbContext.Database.Exists())
        {
            //Create blank database.
            _dbContext.Database.Create();

            //Run all table creation scripts here. 

            //Seed any initial data.
            Seed();
        }
    }

    private void Seed()
    {
        //Seeding scripts.
    }

}

提前致谢。

编辑:事实证明我用我发布的初始代码(The Shame)回答了我自己的问题。在DBContext上调用Create()方法实际上会为你运行所有脚本,这是导致它失败的原因。

我会放弃这一点,以避免将来出现与我相同的错误,因为我认为它不适用于数据库第一种方法。

0 个答案:

没有答案