私はMVCを学んでおり、単一のモデルクラスを作成し、次に単一のコンテキストクラスを作成し、モデルとコンテキストの組み合わせに基づいてコントローラーとビューを作成し、コードを使用してモデルをデータベースにコミットする方法を理解しています-最初。
次に、2番目のモデル(したがってテーブル)をミックスに入れたいと思います。最初に2番目のコンテキストクラスを作成し、次に2番目のモデルクラスを作成し、次にコントローラーとビューを同じ方法で作成しようとしました。この結果、一度に1つのモデルしかデータベースにコミットできないことがわかりました。一方のモデルで自動移行を有効にUpdate-Database
してからパッケージマネージャーでコマンドを実行すると、もう一方のテーブルがデータベースから消え、もう一方のモデルの追加/削除/編集/表示機能が機能しなくなりました。
確かに、この手法を使用して複数のテーブルを管理できる必要がありますか?私の質問は、次のような2つのモデルクラスがある場合です。
[Table("TableOne")]
public class ModelOne
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Foo { get; set; }
}
[Table("TableTwo")]
public class ModelTwo
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Bar { get; set; }
}
両方を操作する場合、Contextクラスはどのように見える必要がありますか?私のアイデアはこれを試すことでした:
public class FooBar : DbContext
{
public FooBar()
: base("DefaultConnection")
{
}
public DbSet<ModelOne> TableOne { get; set; }
public DbSet<ModelTwo> TableTwo { get; set; }
}
次に、コントローラーの追加ウィザードで、[テンプレート]ドロップダウンリストから[ Entity Framework] 、[モデルクラス]ドロップダウンリストから[ ModelOne ] 、[データコンテキストクラス]ドロップダウンから[ FooBar]を使用して、読み取り/書き込みアクションとビューを備えたMVCコントローラーを選択できます。最初のモデルのダウンリスト、および2番目のモデルのModelクラスドロップダウンリストのModelTwoでのみ同じオプションがあり、すべてが期待どおりに機能しますが、モデル1に基づいて最初のコントローラーを作成しようとすると、次のようになります。エラー:
FooBarの生成中にエラーが発生しました。プロジェクトを再構築してみてください。
プロジェクトを再構築しようとしましたが、同じエラーが発生するので、明らかに私はもっと大きな間違いをしています。何が間違っているのでしょうか。また、FooBarコンテキストクラスが間違っていると仮定して、FooBarコンテキストクラスを修正して機能させるにはどうすればよいですか?