MVC3 Code First EF では、新しいエンティティを作成せずに (多対多)、あるエンティティを別のエンティティにどのように関連付けますか?
したがって、class1 と class2 の間には多対多の関係があります。多くのclass2を保持するにはclass1が必要であり、その逆も同様です。ただし、class2 は独立しています。個別に編集してから新しいクラス1に関連付けたいそれらのリストがあります。
class2List を (AJAX および JSON 経由で) コントローラーに渡すと、class2 のすべての ID がデータベース内の既存の ID に対応していることを確認しました。つまり、新しい class2 は作成されません。
モデル
class
{
[key]
public int Id {set; get;}
}
class1 : class
{
private ICollection<class2> _class2s;
public virtual ICollection<class2> class2s
{
get { return _class2s ?? ( _class2s = new HashSet<class2>()); }
set { _class2s = value; }
}
}
class2 : class
{
private ICollection<class1> _class1s;
public virtual ICollection<class1> class1s
{
get { return _class1s ?? ( _class1s = new HashSet<class1>()); }
set { _class1s = value; }
}
}
コントローラ
public ActionResult SaveChanges(List<class2> class2List)
{
createNewClass2AndAssociateExistingClass2s(class2List);
SaveChangesToDb();
return View("ProductDetail", Model);
}
createNewClass2AndAssociateExistingClass2s(List<class2> class2List)
{
var newClass1 = newClass1()
{
class2s = class2List;
}
////UnitOfWork allows me to access several DbSets in one transaction
unitOfWork.Create(newClass1)
}
SaveChangesToDb()
{
unitOfWork.Commit();
}
これが行うことは、新しい class1 を作成することですが (そうあるべきです)、既存の class2 をそれに関連付ける代わりに、新しい ID を持つ新しい class2 を作成し、それらをデータベースに追加します。
私の質問:
これは、EF が基本クラスから Id プロパティを読み取る方法と関係がありますか?
データベースに新しいclass2を作成せずに、いくつかの既存のclass2をリストとして新しいclass1に関連付けるにはどうすればよいですか?
乾杯