Проблемы внешнего ключа Entity Framework при вставке нескольких записей? - PullRequest
3 голосов
/ 14 декабря 2011

Мы сталкиваемся с проблемой, когда при отправке списка нескольких объектов для добавления в базу данных мы получаем ошибки, связанные с внешними ключами ...

using (context ctx = new context()
{
    foreach(foo f in bars)
    {
         ctx.AddToFoo(f);
    }
    ctx.SaveChanges();
}

ошибка говорит о том, что оператор вставки конфликтует с ограничениями foriegn key, но если я перемещу SaveChanges () внутри цикла foreach, он работает нормально, но кажется, что он будет намного медленнее ...

Я бы свернул это в класс BulkCopy, но у нас есть куча кода регистрации, привязанного к SaveChanges.

Edit: вот ссылка на изображение исключения Linky

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Я не знаю, почему это будет работать внутри цикла for. Если есть исключение вне цикла, то оно также должно давать исключение внутри.

Необходимо устранить неполадки ограничения внешнего ключа, перечисленные в исключении. Итак, если ограничение - «FK_Foo_Parent», то сначала вам нужно иметь родительский элемент, на который ссылается элемент Foo.

Ваш код должен выглядеть следующим образом:

                using (context ctx = new context())
                {
                    ctx.AddToParents(parent);

                    foreach (foo f in bars)
                    {
                        parent.Foos.Add(f);
                        ctx.AddToFoos(f);
                    }
                    ctx.SaveChanges();
                }

Это установит ссылки внешнего ключа между новой записью foo и ее родительской записью.

0 голосов
/ 14 декабря 2011

Похоже, что SaveChanges не сохраняет каждый файл в том же порядке, в котором они добавлены в AddToFoo.

...