如果不存在则创建数据库

时间:2017-10-17 22:15:31

标签: c# entity-framework sqlite

我想创建数据库,如果它不存在。我使用sqlite作为数据库源和Entity Framework。首先,我添加了新模型(代码优先),并在当前目录中将数据库源设置为database.db

接下来,我添加了简单的课程:

class User {
    public int Id { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

当然还有数据库上下文:

class TestContext : DbContext {
    public DbSet<User> Users { get; set; }

    public TestContext() :base("TestModel"){
        //Create database always, even If exists
        Database.SetInitializer<TestContext>(new DropCreateDatabaseAlways<TestContext>());
    }
}

connectionString已经app.config

<connectionStrings>
    <add name="TestModel" connectionString="data source=&quot;C:\Users\root\Documents\Visual Studio 2015\Projects\dbTEST\dbTEST\bin\Debug\database.db&quot;" providerName="System.Data.SQLite.EF6" />
</connectionStrings>

在运行这段代码后出于某种原因:

using (var ctx = new TextContext()) {
    ctx.Database.Create();
}

我收到错误:

An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll

Additional information: Database 'main' cannot be created because it already exists.

我无法理解这有什么不对。我不知道main数据库来自哪里。我将数据库文件设置为database.db。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您的构造函数指示每次应用程序启动时都会删除并创建数据库。 因此,删除ctx.Database.Create(),因为这是由框架处理的。