Перемещение объектов сущностей из одной коллекции сущностей в другую - PullRequest
3 голосов
/ 07 декабря 2011

Можно ли переместить отношения с одного лица на другое?

У меня есть таблица 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 невозможно? , но выдает следующую ошибку

Произошло нарушение ограничения ссылочной целостности: первичный ключ свойство, которое является частью ограничения ссылочной целостности, не может быть изменен, когда зависимый объект неизменен, если он не установлен к основному объекту ассоциации. Основной объект должен быть отслеживается и не помечается для удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...