Entity Framework 7 및 SQLite 테이블이 생성되지 않음

c# entity-framework-core sqlite

문제

나는 잠깐 동안 하나의 DBContext를 사용하여 Code First 방식으로 여러 테이블을 만드는 법을 배웠다. 프레임 워크에 익숙하지 않은 것 같지만 확실하지 않습니다. 다음은 엔티티와 DBContext를 사용한 간단한 예제입니다.

[Table("MyEntity")]
public class MyEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

[Table("MySecondEntity")]
public class MySecondEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyTable { get; set; }
    public DbSet<MySecondEntity> MyTable2 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder {DataSource = "test.db"};
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}

그것이 작동해야하는 것처럼 날 보입니다,하지만 내가 아래의 코드에서 그것을 호출 할 때 'No such table : MyEntity'의 첫 번째 foreach 루프를 쳤을 때 예외가 발생합니다.

[Table("MyEntity")]
public class MyEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

[Table("MySecondEntity")]
public class MySecondEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyTable { get; set; }
    public DbSet<MySecondEntity> MyTable2 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder {DataSource = "test.db"};
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}

나는 그것이 내가 누락 된 단순한 무엇인가를 거의 보장 할 수있다. 그러나 나는 그것을 찾을 수 없을 것으로 보이며, 그들의 문서에서 찾을 수있는 예제가 없다. GitHub에서 https://github.com/aspnet/EntityFramework/issues/2874 에 제출 된 비슷한 문제가있는 것으로 보입니다.하지만 여러 가지 상황에 해당합니다. 어쩌면 이것은 아직 발표하지 않은 또 다른 작품일까요?

해결책

@natemcmaster에서 제안한대로 http://ef.readthedocs.org/en/latest/getting-started/uwp.html에 게시 된 자습서를 수행하고 @ lukas-kabrt가 권장하는 솔루션을 통해 다음과 같이 작업 할 수있었습니다. 원하는. 아래 명령을 실행하여 테이블을 생성하고 그 테이블을 삽입 / 선택 할 수있었습니다.

[Table("MyEntity")]
public class MyEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

[Table("MySecondEntity")]
public class MySecondEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string MyColumn { get; set; }
    public int MyNumber { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyTable { get; set; }
    public DbSet<MySecondEntity> MyTable2 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder {DataSource = "test.db"};
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }
}

수락 된 답변

DbContext 테이블, relationsships 등을 사용하려면 - 클래스는 데이터베이스의 구성이 포함되어 DbContext 당신은 당신의 일치하는 데이터베이스를 작성해야합니다 DbContext . 코드 첫 번째 세계에서는 데이터베이스 마이그레이션에 의해 수행됩니다.

ASP.NET 5의 경우이 구성을 project.json 파일에 추가해야합니다.

"commands": {
    "ef": "EntityFramework.Commands"
}

다음 프로젝트에 마이그레이션을 추가하고 다음 명령을 실행하여이 마이그레이션을 DB에 적용하십시오.

"commands": {
    "ef": "EntityFramework.Commands"
}

Full .NET의 경우 패키지 관리자 콘솔 (Tools - NuGet Package Manager - 패키지 관리자 콘솔)에서 다음 명령을 실행해야합니다.

"commands": {
    "ef": "EntityFramework.Commands"
}

인기 답변

공식 문서에서 UWP - EF 7 시작하기를 확인하십시오. 다음은 해당 문서의 참고 사항입니다.

UWP의 기본 경로는 쓰기 가능하지 않습니다. DB 파일은 ApplicationData.Current.LocalFolder 있어야합니다.

options.UseSqlite("Data Source=" + Path.Combine(ApplicationData.Current.LocalFolder.Path, "blogging.db"))

또한 UWP에서는 명령에서 마이그레이션을 실행할 수 없습니다. 앱에서 실행해야합니다.

options.UseSqlite("Data Source=" + Path.Combine(ApplicationData.Current.LocalFolder.Path, "blogging.db"))



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.