Проблема решена. Ошибка была добавлена, потому что я сопоставил процесс Upsert с таблицей два раза, один раз как вставка и один раз как обновление. Это было неправильно!
Я удалил сопоставление таблицы с сохраненным процессом.
Я изменил сохраненный процесс на вместо того, чтобы возвращать суррогатный ключ, чтобы он возвращал весь набор данных того, что было вставлено или обновлено, включая суррогатный ключ.
Затем я добавил функцию import к сохраненному процессу и заставил его вернуть коллекцию, поэтому моя таблица.
Затем я изменил код POC, чтобы взять результаты сбора и вернуть первый суррогатный ключ;
public string test(SimpleTableExample ste)
{
ExamplesEntities1 ex1 = new ExamplesEntities1();
var results = ex1.USP_UPSERT_SimpleTableExample(ste.NaturalKey1, ste.NaturalKey2, ste.NaturalKey3, ste.DataField).ToList<SimpleTableExample>();
string returnvalue = results.First().SurrogateKey.ToString();
return returnvalue;
}
Тест выполнил вставку, когда не было подходящих натуральных клавиш, и обновление, когда натуральные ключи совпали.