5

Немного расстроен здесь. Я пытаюсь найти способ поддержки каскадирования обновлений с помощью инфраструктуры сущности, и, похоже, нет встроенного способа. Исследования в сети в основном показывают, что все говорят, что в любом случае вы никогда не должны изменять значение первичного ключа, но есть допустимые случаи, когда вам нужно (например, значение UPC в качестве первичного ключа, а штрих-коды UPC теперь становятся больше, что означает обновление существующие и поддерживающие отношения с внешним ключом).Структура сущности и ОБНОВЛЕНИЕ КАСКАДА

Один из подходов, по-видимому, относится к событию SavingChanges, показывает, изменяются ли поля первичного ключа, и если это так перемещается по свойствам навигации и таким образом обновляет вспомогательные таблицы.

Это, теоретически, будет работать. Но это просто звучит громоздко. У кого-то есть лучшая идея? Не могу поверить, что Билл оставил бы этот материал вне рамки только потому, что большинство людей этого не делают. SQL Server все еще поддерживает его ...

Thx!

+0

Кто такой Билл ???? –

+0

Законопроект о запуске MS ... –

+0

см. MSDN: http://msdn.microsoft.com/en-us/library/bb738695.aspx – RPM1984

ответ

2

Вы не можете изменить первичный ключ напрямую через EF. Проблема в том, что EF вносит изменения, где первичный ключ = x. Таким образом, вы не можете изменить x.

Вы можете выполнить хранимую процедуру из EF, которая будет обновлять первичный ключ.

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

+0

Thx. Примером может служить штрих-код, и я могу придумать множество сценариев (в существующих системах), где штрих-код стал бы основным ключом. Это имело смысл до тех пор, пока EF не въехал в город. Я думаю, что единственный способ теперь будет заключаться в том, что внешние ключи обрабатывают каскадирование самостоятельно, хотя это означает, что мне нужно обновить объект после сохранения, чтобы убедиться, что у меня есть нужные данные в памяти. –