我有一个带有两个外键的链接表。它们是桌子的主要关键。我想在Linq中映射这个:
[Table(Name = "PartToPart")]
public class PartToPart
{
[Column(Name = "PartID", IsPrimaryKey = true )]
public int PartID { get; set; }
[Column(Name = "ParentPartID", IsPrimaryKey = true)]
public int ParentPartID { get; set; }
}
我认为这是错误的并且使Linq假设两列都是他们自己的主键?如果我尝试将新条目保存到此表,则会出现约束违规错误:
违反主键约束...无法在对象dbo.PartToPart中插入重复键。重复键值为...
我尝试通过INSERT查询手动插入密钥,并且工作正常,所以我假设我的表设置正确。奇怪的是,无论错误消息如何,插入都可以正常工作。
我检查了the docs对我来说听起来应该像我一样:
如果使用此属性指定该类的多个成员,则该键称为关联列的组合。
对此有何帮助? 感谢。
答案 0 :(得分:3)
您的班级定义是正确的。您可以使用与编写完全相同的复合键来编写实体。请注意,如上所述,密钥必须由C#代码设置,并且它们不是自动递增字段。你告诉我这是确切的,所以这不是问题所在。
鉴于错误,我会说你试图插入两次相同的记录(和/或插入两次“空”记录,然后设置PartID
和ParentPartID
0由.NET提供)