2017-10-17 6 views
1

존재하지 않는 경우 데이터베이스를 만들려고합니다. 데이터베이스 소스로 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>()); 
    } 
} 

이미 app.configconnectionString 했어 :

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

그리고 이 코드를 실행 한 후 어떤 이유로 든

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

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

나는이 잘못 이해 못할 :

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

나는 오류가 무엇입니까. 나는 main 데이터베이스의 출처를 모른다. 데이터베이스 파일을 database.db으로 설정했습니다. 그걸 도와 줄 수있어?

+0

Ef 코어 또는 엔티티 프레임 워크 6에서 수행하려고합니까? –

+0

동일한 문제가 있습니다. 비록 InitializeDatabase를 오버라이드하고 매뉴얼이 존재하지 않는다면 Database.Create()를 수행한다. @ Dawvawd :이 문제를 해결해 본 적이 있습니까? – cmxl

답변

0

생성자는 응용 프로그램이 시작될 때마다 DB가 삭제되고 만들어 지도록 지시합니다.

따라서 프레임 워크가 처리하므로 ctx.Database.Create()를 제거하십시오.

관련 문제