没有聚簇主键的映射表

时间:2013-01-21 22:41:57

标签: c# sql linq entity-framework-4 ef-code-first

当我在DataContext中有两个POCO课程(我将它们用作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)的多次调用只添加了一个项目,而不是它被调用的次数。

1 个答案:

答案 0 :(得分:0)

我认为您必须明确拥有一个明确执行映射的实体。关系本身将具有ID作为其主键而不是复合键。它假定(我认为理所当然)你的意图是不要有多个关系实例。否则,如果你需要,它会如何知道编辑或删除哪一个?

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

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

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?
}