【发布时间】:2017-06-23 13:56:28
【问题描述】:
我想复制现有行,更改 ctid 列,然后再次将它们复制到表的末尾。我尝试了,我得到了错误:
无法使用已在使用的密钥添加实体。
可能是因为我正在复制行并使用相同的主键添加它们。我该如何解决这个问题?是否可以在不修改数据库架构的情况下解决它(我也在考虑添加 ctid 作为主键)?
代码
var testsDefault = (from i in dc.TestUnits
where i.ctid == null
select i).ToList();
List<DAL.TestUnit> TestList = new List<DAL.TestUnit>();
foreach (var test in testsDefault)
{
DAL.TestUnit newTest = new DAL.TestUnit();
newTest.TestID = test.TestID;
newTest.PatientType = test.PatientType;
newTest.Unit = test.Unit;
newTest.ctid = "105";
TestList.Add(newTest);
}
dc.TestUnits.InsertAllOnSubmit(TestList);
dc.SubmitChanges();
【问题讨论】:
-
你能告诉我们你的代码吗?
-
这不是 3 个键。这是一个分布在 3 列中的键。
-
多个主键就是我们所说的复合键
-
好吧不知道。我该如何克服这种情况?
-
主键 - 复合与否 - 用于唯一标识一行。这意味着如果您知道键值,那么您就知道该行。您需要考虑您的对“哪些值是识别我的行的合适组合”的定义,然后相应地更改您的程序或表(甚至两者)。跨度>