Проблема внешнего ключа с вложенным linq to sql insert - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть интересная проблема, я пытаюсь вставить вложенные данные, используя l2s, все в порядке, если я не пытаюсь вставить объект с fk также в корневой родитель, пример схемы:

Хостинг imgur.com

Все идентификаторы - это идентификационные данные 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 to nested1 id, эта ошибка возникает, когда nested3 имеетfk только для родительского идентификатора nested2, проблем нет, кажется, что l2s не может получить идентификацию от nested1 только от предыдущего родителя.

Так как это преодолеть?

1 Ответ

2 голосов
/ 28 апреля 2011

Хорошо, я нашел решение.

Если есть другой fk, вам нужно добавить текущие вложенные данные также в родительскую коллекцию, таким образом l2s получит столько значений идентичности fk, сколько вам нужно.1003 *

Для этого примера это будет:

n1.nested3.Add(n3);

После n2.nested3.Add (n3);

...