2009-07-24 14 views
7

私はPOCプロジェクトのEntity Frameworkで遊んでいます。私が持っている私のデータベースで エンティティフレームワーク多対多CRUD

Category<-------CategoryProduct ------->Product

(表は、モデル内のエンティティである参加ところ。)

私はどのように行うことができます/を選択/更新または削除を挿入これは?

答えて

13

は単に... EFは、デフォルトでCategoryProductエンティティを生成しません、代わりにあなたが使用して関係を削除/作成する必要がありますそのテーブルを操作するために、2つのFKS Productに1とCategoryの1で構成されProduct.CategoriesまたはCategory.Productsコレクション。

I.e.

var pc = from c in ctx.Categories 
     from p in c.Products 
     select new {CategoryID = c.ID, ProductID = p.ID}; 

を、更新が作成しません:

product.Categories.Remove(category); // or visa versa 

は、そのテーブルの行を取得するために、すなわちテーブルを照会するには、次の行を削除するには

product.Categories.Add(category); // or category.Products.Add(product); 

:行を追加しますPKは(変更できない)更新することができ、すべての列、すなわち、行の列のどれもがあるので、行自体を更新することができないので意味、(当然の削除を除きます)。

ホープこれは

アレックス・ジェームス

+0

アレックスに感謝します。しかし、私はどのように製品のコラムを終わらせることができますか? このエラーが発生しました: エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスで参照できません。 コードは次のとおり パブリックstatic int型の更新(生成物C)を用い {(SimvideoEntities CTX =新しいSimvideoEntities()){ ctx.Attach(C); Common.SetModified(CTX、C)。 戻り値ctx.SaveChanges(true); } } – Shuaib

+0

[OK]を私は更新&削除作業を持っているが、私は文脈から最初にレコードを取得し、それを保存/削除する必要があります。 – Shuaib

+1

アレックスに感謝したアレックス。良い仕事を続けてください。 – Shuaib

1

二つの方法、私は考えることができる少なくとも二つあります

  1. は、各オブジェクトの実体を持って、これは厄介であり、配線が正しい入手困難いつものように、です。
  2. 多対多リレーションシップを多対多としてモデル化するようにモデルを編集し、多対多リレーションシップをモデル化します。

オプション2はより良い方法ですが、現在のところ、CategoryProductに関連付けられた他のデータがある場合、それは機能しません。 CategoryProductテーブルを想定し

+0

感謝を助けます。それが私のしたことです。中産階級を削除しました。したがって、モデルではMany To Manyであり、CategoryProductはなくなりました。 – Shuaib

関連する問題