Entity Framework CoreおよびSQLiteを使用してDBを移行すると、テーブルが既に存在する

entity-framework-core sqlite uwp

質問

私はUWPでEFコアとSQLiteを使用しています。私はDbContext.Database.Migrate()を呼び出すことによって移行しようとしましたが、私はいつもMicrosoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'table "Tags" already exists'.'を取得しMicrosoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'table "Tags" already exists'.'

私はbin / debugフォルダをチェックしたのでテーブルが存在しないと確信していますが、データベースファイルはありません。私が間違ったフォルダをチェックしても、問題はないはずですか?
Migrationsフォルダを何度も削除しましたが、これがこの例外の原因ではないと思います。

これはDbContextコードです。

public class AppDbContext : DbContext
{
    public DbSet<Word> Words { get; set; }
    public DbSet<WordMeaning> WordMeanings { get; set; }
    public DbSet<Tag> Tags { get; set; }
    public DbSet<WordTag> WordTags { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=Vocabulary.db");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // PK declaration
        modelBuilder.Entity<Word>()
            .HasKey(w => w.Text);
        modelBuilder.Entity<WordMeaning>()
            .HasKey(wm => new { wm.WordText, wm.WordClass });
        modelBuilder.Entity<Tag>()
            .HasKey(t => t.Name);
        modelBuilder.Entity<WordTag>()
            .HasKey(wt => new { wt.WordText, wt.TagName });

        // relation declaration
        modelBuilder.Entity<Word>()
            .HasMany(w => w.WordMeanings)
            .WithOne(wm => wm.Word)
            .HasForeignKey(wm => wm.WordText)
            .IsRequired()
            .OnDelete(DeleteBehavior.Cascade);

        modelBuilder.Entity<WordTag>()
            .HasOne(wt => wt.Tag)
            .WithMany(t => t.WordTag)
            .HasForeignKey(wt => wt.TagName);
        modelBuilder.Entity<WordTag>()
            .HasOne(wt => wt.Word)
            .WithMany(w => w.WordTag)
            .HasForeignKey(wt => wt.WordText);
    }
}

すべてのモデルコード。

public class Tag
{
    public string Name { get; set; }
    public string Description { get; set; }
    public List<WordTag> WordTag { get; set; }
}
public class Word
{
    public string Text { get; set; }
    public WordClass WordClasses { get; set; }
    public DateTime AddedDate { get; set; }
    public List<WordMeaning> WordMeanings { get; set; }
    public List<WordTag> WordTag { get; set; }
}
public class WordMeaning
{
    public string WordText { get; set; }
    public string Definition { get; set; }
    public string Example { get; set; }
    public WordClass WordClass { get; set; }
    public Word Word { get; set; }
}
public class WordTag
{
    public Word Word { get; set; }
    public Tag Tag { get; set; }
    public string WordText { get; set; }
    public string TagName { get; set; }
}

受け入れられた回答

@Gert Arnoldは、あなたのSQLiteデータベースファイル(Vocabulary.db)はデフォルトでLocalFolder上に作成されるべきだと述べました。 Tagテーブルが既にC:\Users\{username}\AppData\Local\Packages\{your app package name}\LocalState)作成されているデータベースを見つけることができるはずです。あなたのプロジェクトのPackage.appxmanifest->Packing->Package namePackage.appxmanifest->Packing->Package name 。 uwpアプリケーションでのファイルアクセスの詳細については、ファイル、フォルダ、ライブラリを参照してください。

そして、uwpを使ったエンティティフレームワークの詳細については、 UWP - New Databaseを参照してください。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ