Linq 2 SQL:复合主键

5

我有一张链接表,其中有两个外键。它们共同组成了表的主键。我正在尝试在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 查询手动插入键,这样做很好,所以我认为我的表设置正确。奇怪的是,即使出现错误消息,插入仍然有效。
我查看了文档,对我来说,它听起来应该按照我所拥有的方式工作:
如果您使用此属性指定类的多个成员,则称该键为相关列的组合。
这方面有任何帮助吗? 谢谢。

带有[Table]属性,那应该是LINQ-to-SQL,对吧? - xanatos
代码应该是正确的,如果我没记错的话。这两个值都是由程序手动设置的吗?还是其中一个是自增的? - xanatos
两者均为其各自表中的外键和自增字段。我手动通过程序将值写入到PartToPart表中。 - Christof
你的错误可能在其他地方...也许你正在尝试插入相同的记录两次或类似的操作。 - xanatos
只是两个整数,还是你的意思是什么?我看到了 [Key] 的例子,但是当我尝试时,VS说它无效? - Christof
显示剩余2条评论
1个回答

4
您的类定义是正确的。您按照您编写的方式编写具有组合键的实体。请注意,如所写,必须由C#代码设置键,并且它们不是自动递增字段。您告诉我这是确切的,因此这不是问题所在。
鉴于错误,我会说您正在尝试两次插入相同的记录(和/或两次插入“空”记录,然后由.NET将其 PartID 和 ParentPartID 设置为0)

再次感谢。如上所述,我的代码被执行了两次。 - Christof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接