2011-09-03 11 views
0

商品テーブルと得意先テーブルがあります。したがって、それらの間には多くの関係があります。これは、ModelBuilderの使用してその関係を作成するために私のコードです:EFコードの多対多関係に関する問題

modelBuilder.Entity<Customer>(). 
        HasMany(c => c.ProductsPurchased). 
         WithMany(p => p.Customers).Map(m => 
              m.MapLeftKey("CustomerId"). 
              MapRightKey("ProductId"). 
              ToTable("CustomersXProducts")); 

問題はここに参加し、テーブルがのCustomerIdとのProductIdの主キーが含まれています。これは、本質的に1人の顧客が同じ製品を1回だけ購入できることを意味する。この問題を解決するにはどうすればよいですか? CustomerIdを私の結合テーブルの主キーにしたくありません。

答えて

1

データベースで問題を解決することはできません。通常、ジャンクション・テーブルのプライマリ・キーには、いくつかの追加の一意の列が必要です。または、CustomerIdProductIdの複合キーを作成するには、いくつかの追加データ列が必要です。それはあなたのモデルの変化につながります。 expose junction table as an entity - CustomerProductのエンティティが新しいエンティティに関連している必要があります。

これはとにかく必要です。追加のデータなしでこのような関係を持つことはあまり一般的ではありません。おそらくあなたのモデルはより大きな変化を必要とするでしょう。たとえば、顧客追跡システムでは通常、Customer、Order、OrderItem、Productなどのエンティティを使用しているため、顧客と製品の間に直接関係はありません。

関連する問題