Можно ли переместить отношения с одного лица на другое?
У меня есть таблица Users , которая имеет отношение 1 .. * к таблице с именем Cars . В одной части моего кода я хочу, чтобы пользователь заменил другую, то есть переместил все отношения Cars новому пользователю. В SQL это может быть достигнуто следующим образом, но как насчет сущности?
UPDATE Cars SET UserId = @newUserId WHERE UserId = @oldUserId
Я бы хотел, чтобы решение было как можно более универсальным, чтобы я мог использовать его по мере необходимости. Как бы вы хотели достичь этого?
Ниже вы найдете кое-что из того, что я пробовал до сих пор.
Путем простого копирования
newUser.Cars = oldUser.Cars;
oldUser.Cars = new EntityCollection<Cars>();
Удалить и вставить
public static void MoveFrom<T>(this EntityCollection<T> to,
EntityCollection<T> from)
where T : class, IEntityWithRelationships
{
foreach (T item in from.ToArray())
{
from.Remove(item);
to.Add(item);
}
}
Использование CopyTo
public static void MoveFrom<T>(this EntityCollection<T> to,
EntityCollection<T> from)
where T : class, IEntityWithRelationships
{
T[] array = new T[from.Count()];
from.CopyTo(array, 0);
foreach (T item in array)
{
to.Add(item);
}
}
Последний рекомендуется в Копирование из EntityCollection в EntityCollection невозможно? , но выдает следующую ошибку
Произошло нарушение ограничения ссылочной целостности: первичный ключ
свойство, которое является частью ограничения ссылочной целостности, не может быть
изменен, когда зависимый объект неизменен, если он не установлен
к основному объекту ассоциации. Основной объект должен быть
отслеживается и не помечается для удаления.