1

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に関連付けるにはどうすればよいですか?

乾杯

4

1 に答える 1

1

わかりましたので、これを理解することから私が学んだ2つのこと:

  • インターフェイスを実装する必要があるときに、抽象クラスから継承していました。これは、「Id」などの同様のプロパティを持つ複数のエンティティがあり、次のようなことをしたい場合に最適です。

    T FindById<T>(int id) where T : IEntity

  • EF で関連付けを行う場合、Id が既存のエントリと一致しても、ここにあるように、EF がコンテキストでそのエントリを追跡していない限り、そのエントリは更新されませ。私がする必要があったのは:

    • リポジトリから必要なIDでエントリを取得するメソッドをマッピングレイヤーに追加します
    • 新しいエントリの属性をそのコンテキスト エントリにコピーします。
    • コンテキスト エントリを返す

これが誰かを助けることを願っています

于 2012-06-21T22:10:46.530 に答える