0

私の中に2つのPOCOクラスがある場合DataContext(そしてそれらをとして使用する場合DbSet<>)、EFコードは最初にカーテンの後ろにマッピングテーブルを作成します:

class Subscription
{
   ICollection<Product> Products {get;set}
}

class Product
{
   ICollection<Subscription> Subscriptions {get;set}
}

およびシークレット マッピング テーブル:

CREATE TABLE [dbo].[ProductSubscriptions](
  [Product_Id] [bigint] NOT NULL,
  [Subscription_Id] [bigint] NOT NULL
) ON [PRIMARY]

2 つの ID フィールドにクラスター化された主キーを使用します。

質問: 両方のフィールドにクラスター化された主キーなしでテーブルを作成することは可能ですか? ここには多対多の関係があるため、次のような複数のエントリがあります。

{ Product_Id = 1, Subscription_Id = 1 }
{ Product_Id = 1, Subscription_Id = 1 }
{ Product_Id = 1, Subscription_Id = 2 }
{ Product_Id = 1, Subscription_Id = 2 }
...

主キーを削除しましたが、呼び出されDataContext.Products.Subscriptions.Add(1)た回数ではなく、単一のアイテムのみを追加するための複数の呼び出し。

4

1 に答える 1

0

明示的にマッピングを行うエンティティが明示的に必要になると思います。リレーションシップ自体は、複合キーではなく主キーとして ID を持ちます。あなたの意図は関係の複数のインスタンスを持つことではないと仮定しています(そして私は当然そう思います)。そうしないと、編集または削除する必要がある場合に、どのファイルを編集または削除する必要があるかをどのように知ることができますか?

また、関係の複数のインスタンスがあるのはなぜですか? あるものは別のものと本当に違うのでしょうか? それとも、サブスクリプションに 1 つの製品が複数ある場合、「カウント」を追加する必要がありますか?

次のようなものが必要なようです。

class Subscription
{
   ICollection<SubscriptionDetail> SubscriptionDetails {get;set}
}

class SubscriptionDetail
{
    Product Product {get; set;}
    int count {get; set;} // have a count vs. having multiple Product entries?
}
于 2013-01-21T22:53:56.187 に答える