2017-05-28 12 views
0

Microsoft.EntityFrameworkCore.SQLiteを使用して、データベースのコードレベルの作成を作成し、テーブルに単純な行を追加しようとしています。私はエラーSQLite error: no such table Jumplistsを得ます。まず、ここでは他の2つのクラスが、ここで繰り返す価値がないクラステーブルの作成Entity FrameworkのコアとSQLite

using JumpList_To_Clipboard.Data.Tables; 
using Microsoft.EntityFrameworkCore; 

namespace JumpList_To_Clipboard.Data 
{ 
    public class DataSQLite : IData 
    { 
     public const string DATABASE = "data.sqlite"; 

     public DataSQLite() 
     { 
      using (var db = new SQLiteDbContext(DATABASE)) 
      { 
       // Ensure database is created with all changes to tables applied 
       db.Database.Migrate(); 

       db.JumpLists.Add(new JumpList { Name = "Default" }); 
       db.SaveChanges(); // Exception thrown here 
      } 
     } 
    } 
} 

DbContextクラス

using JumpList_To_Clipboard.Data.Tables; 
using Microsoft.EntityFrameworkCore; 

namespace JumpList_To_Clipboard.Data 
{ 
    class SQLiteDbContext : DbContext 
    { 
     readonly string db_path; 

     public DbSet<JumpList> JumpLists { get; set; } 
     public DbSet<Group> Groups { get; set; } 
     public DbSet<Item> Items { get; set; } 

     public SQLiteDbContext(string database) : base() 
     { 
      db_path = database; 
     } 

     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
     { 
      optionsBuilder.UseSqlite(string.Format("Data Source={0}", db_path)); 
     } 
    } 
} 

ジャンプリストクラス

using System.Collections.Generic; 

namespace JumpList_To_Clipboard.Data.Tables 
{ 
    public class JumpList 
    { 
     public int JumpListId { get; set; } 
     public string Name { get; set; } 

     public List<Group> Groups { get; set; } 
     public List<Item> Items { get; set; } 
    } 
} 

あるために、最後から

、エラーを出さないでください。

data.sqliteファイルを見るためにfirefox sqlite拡張機能を使用すると、私の3つの表は表示されません。

コマンドdb.DataBase.Migrate

は、データベースへのコンテキストのために保留中のマイグレーションを適用しますと言います。

pending migrationsとは何ですか?私はどこにもドキュメンテーションを見つけることができない。

が私からの例を組み合わせています:

編集:私はそれが動作db.Database.Migrate();db.Database.EnsureCreated();と交換場合。ドキュメントのMigrate()は同じですが、EnsureCreated()にはないテーブル構造の更新を作成することができます。よくわかりません。

答えて

0

ので、

マイクロソフトは、まともなドキュメントを作成する深刻な問題がありますが、私は、リンクであるLearning Entity Framework Coreためやや時代遅れのドキュメント、特に移行を持っているサイトを見つけました。上部に

、それはVisual Studioを持っている場合は、移行を管理するために、パッケージマネージャコンソール(PMC)を使用することができ、

に言及しています。

あなたが移行コマンドを実行するパッケージマネージャコンソールを使用したい場合は、あなたがそれを保証する必要があります:あなたが持っている必要があること、右上部に述べてPackage Manager Consoleページにつながっ

最新バージョンのMicrosoft.EntityFrameworkCore.Toolsproject.jsonファイルに追加されます。

問題があり、どこにでも私のプロジェクト(またはソリューション)にはproject.jsonファイルはありません。いくつかの検索の後、私はNuGetを使って、Microsoft.EntityFrameworkCore.Tools

を追加しました。Tools > NuGet Package Manager > Package Manager Consoleを実行しました。add-migration InitialDatabasesコマンドを実行できました。最後の部分InitialDatabasesは、あなたのために作成したクラスの名前で、プロジェクトのベースにあるMigrationsというフォルダに収められています。

今とき:

context.Database.Migrate(); 

を実行するには、すべてが順調です!

+0

ここでは、EFコアの移行に関するMicrosoftの文書を見つけるのが非常に難しいです:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations – bricelam

+0

@bricelam「Getting Started "そのページ、私はその時に探していたものではなかったからです。 WCFとEFCをバインドして、私は前に進みました。知っておいてよかった。私はあなたが皮肉っていると思うが、公式の文書[Getting Started](https://docs.microsoft.com/en-us/ef/core/get-started/)と[EF Core with WPF and .Net ](https://docs.microsoft.com/en-us/ef/core/get-started/full-dotnet/)と私の言いたいことがわかります。彼らは引用されていないブログの例を含んでいません。もしあなたがそれを修正したら、綴じ目の投稿を追加し、コンボボックスでブログを選択し、コードとxamlの中に投稿を埋め込む。 –

+0

風刺はありません。深刻な文書の欠如があり、そこにある文書は見つけたり、移動することが不可能です。 – bricelam

0

この試してみてください(なぜ数ヶ月前のプロジェクトで私のために働いたが、私は覚えていません):sqliteのはLONG​​として使用しているため

public virtual DbSet<JumpList> JumpLists { get; set; } 
public virtual DbSet<Group> Groups { get; set; } 
public virtual DbSet<Item> Items { get; set; } 

はまた、私はクラスIDのINTのLONGの代わりに使用していましたCRUD操作を行った後は、LONG(64)をINT(32)に比較/変換/キャストできないため、失敗します。

+0

提案していただきありがとうございました。 –

関連する問題