のない私は、エンティティフレームワーク6とのASP MVC5アプリでの作業などのようにナビゲーションプロパティを持つオブジェクトを作成したいのです:割り当てEntity Frameworkのナビゲーションプロパティクエリ
プロパティCategory
は別のエンティティである
public class widget
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Category Category { get; set; }
}
データベースモデルでは、私はCRUD機能を実装すると、私はそうのようなビューモデルを作成します。
public class EditWidgetViewModel
{
public List<SelectListItem> Categories { get; set; }
public int CategoryId { get; set; }
}
とSelectListの内容は、HTML形式のドロップダウンになります。次に、ユーザーがフォームを送信すると、CategoryId
がサーバーにポストバックされます。私はすでにID番号を知っている - 私はdb.Widgets.Find(WidgetId)
で別のDBのルックアップを実行せずにカテゴリナビゲーションプロパティを割り当てることができます。
var dbWidget = new Widget
{
Name = model.Name,
Category = db.Categories.Find(CategoryId)
}
db.Widgets.Add(dbWidget);
db.SaveChanges();
だから、私の質問は以下の通りです:そこから、私は現在、変更を保存するには、次のようなものをやっていますルックアップを行わずにデータベースのウィジェットテーブルのCategory_Category_Id
列に移動する必要があります。また、5つまたはそれ以上のナビゲーションプロパティを持つものがあれば、それぞれのラウンドトリップで大きなパフォーマンス上の問題になるようです。
おかげでアレックス、これは素晴らしい作品!好奇心のために、間違ったID(つまり存在しないID)を割り当てていると言うことができます - これはエラーを投げますか? – Ben
気象によって異なりますが、データベースに定義されている外部キーの関係はありません。 このコードはすべて、CategoryIdをコードでインスタンス化するカテゴリのIDに設定します。データベースにSaveChangesという外部キー制約があると、スローされます。 –