【发布时间】:2015-03-15 18:07:53
【问题描述】:
我有一个带有两个外键的链接表。它们一起是表的主键。我正在尝试在 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,在我看来它应该按照我的方式工作:
如果您使用此属性指定多个类的成员,则称该键是相关列的组合。
对此有任何帮助吗? 谢谢。
【问题讨论】:
-
带有
[Table]属性,应该是LINQ-to-SQL吧? -
代码是正确的,如果我没记错的话。它们都是由程序手动设置的,还是一个自动增量的?
-
两者都是外键并在自己的表中自动递增。我写入 PartToPart 表的值是由程序手动完成的。
-
您的错误可能出在其他地方...也许您正试图插入相同的记录两次或类似的东西。
-
您要插入什么数据?我通常使用 [Key] 属性(就像这里描述的 msdn.microsoft.com/en-us/data/jj591583.aspx#Composite),但我认为 IsPrimaryKey = true 应该做同样的事情。看起来不错。
标签: c# .net sql-server linq linq-to-sql