Хорошо, проблема была не в операторе вставки. Дело в том, что я не возвращаю никаких записей, когда UserId равен NULL, и поэтому снова вставляю те же записи. Итак ... SQL-сервер делал правильные вещи:)
Однако что-то странное я обнаружил при работе с нулевыми значениями в LINQ. Я должен был изменить следующее
return (from dm in Context.DesktopModules
join qvu in Context.QuickViewUserModules on dm.DesktopModuleID equals qvu.QuickViewModuleId
where qvu.UserId == (userId == Null.NullInteger ? null : (int ?)userId)
orderby qvu.SortOrder, dm.ModuleName ascending
select dm).ToList();
к этому
if(userId == Null.NullInteger)
{
return (from dm in Context.DesktopModules
join qvu in Context.QuickViewUserModules on dm.DesktopModuleID equals qvu.QuickViewModuleId
where qvu.UserId == null
orderby qvu.SortOrder, dm.ModuleName ascending
select dm).ToList();
}
else
{
return (from dm in Context.DesktopModules
join qvu in Context.QuickViewUserModules on dm.DesktopModuleID equals qvu.QuickViewModuleId
where qvu.UserId == userId
orderby qvu.SortOrder, dm.ModuleName ascending
select dm).ToList();
}
Кажется, что LINQ не работает, когда (int) и (int?) Смешаны вместе.