当我在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)
的多次调用只添加了一个项目,而不是它被调用的次数。
答案 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?
}