Linq 2 SQL:复合主键

时间:2015-03-15 18:07:54

标签: c# .net sql-server linq linq-to-sql

我有一个带有两个外键的链接表。它们是桌子的主要关键。我想在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对我来说听起来应该像我一样:

  

如果使用此属性指定该类的多个成员,则该键称为关联列的组合。

对此有何帮助? 感谢。

1 个答案:

答案 0 :(得分:3)

您的班级定义是正确的。您可以使用与编写完全相同的复合键来编写实体。请注意,如上所述,密钥必须由C#代码设置,并且它们不是自动递增字段。你告诉我这是确切的,所以这不是问题所在。

鉴于错误,我会说你试图插入两次相同的记录(和/或插入两次“空”记录,然后设置PartIDParentPartID 0由.NET提供)