C# 不带聚集主键的映射表

C# 不带聚集主键的映射表,c#,sql,linq,entity-framework-4,ef-code-first,C#,Sql,Linq,Entity Framework 4,Ef Code First,当我的DataContext中有两个POCO类时(我将它们用作DbSet),EF code首先在帘幕后面创建一个映射表: class Subscription { ICollection<Product> Products {get;set} } 在两个ID字段上使用群集主键 问题: 是否可以在两个字段上创建没有集群主键的表?因为我在这里有一个多对多关系,因此有多个条目,如: { Product_Id = 1, Subscription_Id = 1 } { Product_

当我的
DataContext
中有两个POCO类时(我将它们用作
DbSet
),EF code首先在帘幕后面创建一个映射表:

class Subscription
{
   ICollection<Product> Products {get;set}
}
在两个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)
只添加一个项,而不是它被调用的次数。

我认为您必须有一个显式执行映射的实体。关系本身将有一个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?
}
类订阅
{
ICollection SubscriptionDetails{get;set}
}
类SubscriptionDetail
{
乘积乘积{get;set;}
int count{get;set;}//与具有多个产品条目相比,是否有一个计数?
}

为什么ProductSubscriptions表中有重复项?它们是什么意思?
{ Product_Id = 1, Subscription_Id = 1 }
{ Product_Id = 1, Subscription_Id = 1 }
{ Product_Id = 1, Subscription_Id = 2 }
{ Product_Id = 1, Subscription_Id = 2 }
...
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?
}