0

当我有两个 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]

在两个 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,因为它是主键而不是复合键。它假设(我认为是正确的)您的意图不是拥有多个关系实例。否则,如果您需要,它如何知道要编辑或删除哪一个?

另外,为什么有多个关系实例?一个真的与另一个不同吗?或者,如果订阅有多个单一产品,您是否只需要添加“计数”?

看起来你需要这样的东西:

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 回答