私はしばらくの間、単一のDBContextを使用してコードファーストで複数のテーブルを作成する方法を見つけようとしています。私はそれがフレームワークの私の馴染みのないことだと確信していますが、私は何が欠けているか分からない。エンティティと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);
}
}
私はそれがうまくいくように見えますが、私が以下のコードでそれを呼び出すと、最初のforeachループを叩くときに 'MyEntity'のSqlite例外はありません。
static void Main(string[] args)
{
using (var db = new MyContext())
{
MyEntity testEntity1 = new MyEntity();
MySecondEntity entity1 = new MySecondEntity();
testEntity1.MyColumn = "Test Data 1";
testEntity1.MyNumber = 12345;
db.MyTable.Add(testEntity1);
db.Database.Migrate();
entity1.MyColumn = "New Data 1";
entity1.MyNumber = 2;
db.MyTable2.Add(entity1);
db.Database.Migrate();
Console.WriteLine("Inserting Data...");
Console.WriteLine("Data in the Database");
foreach (var entity in db.MyTable)
{
Console.WriteLine("Id: " + entity.Id);
Console.WriteLine("Column Data: " + entity.MyColumn);
Console.WriteLine("Number: " + entity.MyNumber);
}
foreach (var entity in db.MyTable2)
{
Console.WriteLine("Id: " + entity.Id);
Console.WriteLine("Column Data: " + entity.MyColumn);
Console.WriteLine("Number: " + entity.MyNumber);
}
}
Console.WriteLine("Examples run finished,press Enter to continue...");
Console.ReadLine();
}
私はそれが何かシンプルであることをほとんど保証することができますが、私はそれを見つけることができないだけで、私は彼らのドキュメントで見つけることができる例はありません。同じような問題がGitHubでhttps://github.com/aspnet/EntityFramework/issues/2874に提出されているようですが、これは複数のコンテキストに適用されます。だから、これはまだリリースされていない別の作品ですか?
溶液
@natemcmasterで提案されているようにhttp://ef.readthedocs.org/en/latest/getting-started/uwp.htmlに載っているチュートリアルに従うことで、@ lukas-kabrtが推奨する解決策として、私はそれを希望。以下のコマンドを実行することで、テーブルを作成してそこからデータを挿入/選択することができました。
Install-Package EntityFramework.Commands –Pre
Add-Migration MyFirstMigration
Update-Database
DbContext
使用するには、テーブルなど、relationsships、 -クラスは、データベースの設定が含まれているDbContext
あなたが一致してデータベースを作成する必要がDbContext
。 Code-first世界では、データベースの移行によって行われます。
ASP.NET 5の場合、この設定をproject.json
ファイルに追加する必要があります
"commands": {
"ef": "EntityFramework.Commands"
}
次のコマンドを実行して、プロジェクトに移行を追加し、この移行をDBに適用します
dnx ef migrations add MyFirstMigration
dnx ef database update
フル.NETの場合は、 パッケージマネージャコンソール (ツール「NuGetパッケージマネージャ」 - 「 パッケージマネージャコンソール 」)で以下のコマンドを実行する必要があります 。
Install-Package EntityFramework.Commands –Pre
Add-Migration MyFirstMigration
Update-Database
公式ドキュメントの「 UWP-EF 7入門」を参照してください。以下の注はその文書からのものです。
UWPのデフォルトパスは書き込み可能ではありません。あなたのDBファイルはApplicationData.Current.LocalFolder
必要がありApplicationData.Current.LocalFolder
options.UseSqlite("Data Source=" + Path.Combine(ApplicationData.Current.LocalFolder.Path, "blogging.db"))
また、UWPではコマンドからの移行を実行できないことに注意してください。あなたはアプリでそれらを実行する必要があります。
using (var db = new BloggingContext())
{
db.Database.Migrate();
}