嵌套linq到sql插入的外键问题

时间:2011-04-27 20:38:34

标签: c# asp.net linq-to-sql insert foreign-keys

我有一个有趣的问题,我正在尝试使用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的标识。

那么如何克服这个?

1 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案。

如果还有另一个fk,你需要将当前的嵌套数据也添加到父集合中,这样l2s将获得所需数量的fk标识值。

对于这个例子,它将是:

n1.nested3.Add(n3);

在n2.nested3.Add(n3)之后;