我有一个有趣的问题,我正在尝试使用l2s插入嵌套数据,如果我不尝试将一个带有fk的实体也插入根父,示例模式,那么一切都可以。
所有id都是pk身份
测试代码:
Models.testdbDataContext db = new Models.testdbDataContext();
List<string> data = new List<string>();
data.Add("kkkk1");
data.Add("kkkk2");
data.Add("kkkk3");
data.Add("kkkk4");
data.Add("kkkk5");
foreach (var item in data)
{
nested1 n1 = new nested1();
n1.name1 = "test1";
db.nested1.InsertOnSubmit(n1);
foreach (var item2 in data)
{
nested2 n2 = new nested2();
n2.name2 = "test2";
n1.nested2.Add(n2);
foreach (var item3 in data)
{
nested3 n3 = new nested3();
n3.name3 = "test3";
n2.nested3.Add(n3);
}
}
}
db.SubmitChanges(); <-- error here (duh)
错误:“INSERT语句与FOREIGN KEY约束冲突”FK_nested3_nested1“。冲突发生在数据库”TESTDB.MDF“,表”dbo.nested1“,列'id'。 声明已经终止。“
问题是,如果表nested3也有fk到nested1 id,那么当nested3只有fk时会发生这个错误 它的父nested2 id没有问题,似乎l2s无法从前一个父节点获取nested1的标识。
那么如何克服这个?
答案 0 :(得分:2)
好的,我找到了解决方案。
如果还有另一个fk,你需要将当前的嵌套数据也添加到父集合中,这样l2s将获得所需数量的fk标识值。
对于这个例子,它将是:
n1.nested3.Add(n3);
在n2.nested3.Add(n3)之后;