2017-10-17 15 views
1

データベースが存在しない場合は作成します。私はsqliteをデータベースソースとして使用し、Entity Frameworkを使用しています。最初は新しいモデル(コードを最初に)を追加し、現在のディレクトリにdatabase.dbというデータベースソースを設定しました。私はすでにapp.configconnectionStringを持っていたデータベースが存在しない場合は作成

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

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

そしてもちろん、データベースコンテキストの:

次に、私は単純なクラスを追加しました

<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に設定しました。あなたはそれで私を助けることができますか?

+0

あなたはEfコアまたはエンティティフレームワーク6でやろうとしていますか? –

+0

私は同じ問題があります。たとえ私がInitializeDatabaseをオーバーライドし、それが存在しないことがわかっている場合、手動でDatabase.Create()を実行しても。 @Dawvawd:あなたはこの問題を解決しましたか? – cmxl

答えて

0

コンストラクタは、アプリケーションが起動するたびにDBが削除され、作成されることを指示します。

したがって、これがフレームワークによって処理されるので、ctx.Database.Create()を削除してください。

関連する問題