Неочевидная проблема получала неочевидное решение.
После серии красивых картинок и эпиграфов на неподготовленного читателя неожиданно ухнул большой кусок кода без комментариев.
Еще бы перевести их, эти комментарии.
Поймите правильно, проблема не в том, что код слишком сложен или кто-то не знает английского. Проблема в контрасте между первой и второй частями статьи — для их восприятия требуются слишком разные уровни знаний.
Я, вот, сейчас думаю как решить проблему когда записей на вставку за раз могут быть миллионы (экономим память вставляя пачками, периодически прибивая уже вставленные объекты и контекст), а дупов (записей, с уже имеющимися в базе значениями ключа) среди них может получиться даже большинство (и их надо просто пропускать и вставлять нормальные (если они вообще есть)). В MySQL на этот случай есть прекрасная шткука «INSERT IGNORE», но ни в EF ни в T-SQL такого, увы, нет…
можно вставлять во временную таблицу, где нет ограничений, а дальше тупым SQL-ем переливать
insert into FINAL_TABLE (...)
select… from TEMP_TABLE
where not exists(...);
delete from TEMP_TABLE;
О некоторых неочевидных хаках при работе с entity framework и unique constraints