Как эффективно обновить внешний ключ в LINQ to SQL / SQLMetal?

Я столкнулся с проблемой при попытке обновить поле внешнего ключа:

record.ForeignId = newId;

Он запускает бомбу с помощью «Операция» недействителен из-за текущего состояния объекта "из-за кода SQLMetal, который выдает System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException () .

Я не был первым, кто столкнулся с этой проблемой:

Ошибка LinqToSQL: операция недопустима из-за текущего состояния объекта и http://social.msdn.microsoft.com/ форумы / en-US / linqtosql / thread / f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25 / обсуждают это, среди прочего.

Их решение таково:

record.Foreign = Database.Foreigns.Single(c => c.Id == newId);

Это, конечно, вызывает поиск в БД по Foreign только для того, чтобы вернуть объект с уже известным мне идентификатором! Итак, как мне выполнить это обновление без бессмысленных запросов (или запросов, если у меня много этих FK)?

6
задан Community 23 May 2017 в 10:29
поделиться