Значения SQL Change Id в таблице и обновление всех зависимых записей в других таблицах - PullRequest
0 голосов
/ 25 ноября 2018

Можно ли изменить значения столбца ID в таблице и одновременно обновить все зависимые записи в других таблицах?

Пример данных:

Table : Document                        =>  should be:
Id       Code           Title           Id             Title
------------------------------------    ------------------------------------
1        112512         "Some Title"    112512         "Some Title"
2        123234         "Some Title"    123234         "Some Title"  
3        234321         "Some Title"    234321         "Some Title"

Table : Person
Id       Name           DocumentID 
-----------------------------------  
290      "Roberto"      1 ---> should change to 112512      
291      "Roberta"      3 ---> should change to 234321

Я используюструктура сущностей для доступа к базе данных SQLServer, и я думаю, что с учетом вышеуказанных изменений управление формами и пользовательским вводом будет намного проще.Миграция по структуре выполнена.Теперь мне нужна команда SQL для переноса данных.Я также пытался выполнить миграцию данных вручную:

var Pers = unitOfWork.PersonRep.GetAll().ToList();
foreach (var person in persons)
{
    var doc = person.Document;
    int code = int.Parse(doc.Code);
    doc.ID = code;
    person.DocumnetId = code;
}
unitOfWork.Complete();

Миграция не удалась с этой ошибкой:

Свойство 'ID' является частью ключевой информации объекта и не может быть изменено.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Лучше всего (если вам необходимо сохранить данные) было бы воссоздать FK в БД с опцией ON UPDATE CASCADE (см. документация для получения более подробной информации).Затем обновите значения с помощью стандартного оператора SQL UPDATE и затем заново создайте FK без опции.

Воссоздание (удаление и создание) FK гарантирует, что при запуске оператора UPDATE для таблицы Document всеFK, указывающие на него, будут обновлены автоматически (если у вас есть больше FK, указывающих на Document.ID, вы должны воссоздать все из них, используя опцию).Второе воссоздание FKs просто для того, чтобы установить вещи такими же, какими они были раньше - я не уверен, какую роль они играют для первого кода и / или миграций.Также вам необходимо убедиться, что вы сохраняете имена FK одинаковыми (снова не уверены, если это необходимо).

Это, конечно, предполагает, что вы чувствуете себя комфортно при использовании прямого SQL, так как он полностью игнорирует часть миграции.

0 голосов
/ 25 ноября 2018

Похоже, id является первичным ключом, поскольку в качестве ограничения EF вы не можете изменить pk, вы можете либо добавить другой идентификатор, например (id_pk), и установить id_pk как pk, и вот как вы можете изменить свой id или простоудалить вставку.

в общем, если ваш идентификатор продолжает меняться, вы можете использовать id_pk

...