нужна помощь в обновлении отношения многие ко многим в EF4 - PullRequest
0 голосов
/ 09 августа 2011

У меня есть «EnterpriseEntity» и «TagsEntity», которые имеют отношение «многие ко многим» в таблице «EnterpriseTag», эта таблица отношений просто хранит EnterpriseID и TagID.

Моя задача - обновить этос EF4.Я кодирую следующее:

    //Delete old tags
    foreach(var oldTag in e.Tags.ToList())
    {
    _enterpriseRepository.dbContext.DeleteObject(oldTag);
    }

    //now insert the new ones, this may have elements from old tag list
    foreach(var newTag in newTags)
    {
    e.Tags.Add(newTag);
    }

Как вы можете видеть, список newTags может содержать элементы из старого списка тегов, но я не хочу тратить время на проверку этого тега по тегу.

Но когда я вызываю .Savechanges (), я получаю следующее исключение:

Добавление отношения с сущностью, находящейся в удаленном состоянии, не допускается.

ОБНОВЛЕНИЕ: В моем исходном коде у меня было:

//This delete the Tag object, and i just want to delete the relation
    _enterpriseRepository.dbContext.DeleteObject(oldTag);

Правильный способ сделать это:

//this just delete the relation, not the tag
    e.Tags.Remove(oldTag);

1 Ответ

1 голос
/ 09 августа 2011

Я бы попробовал что-то вроде этого:

var oldTags = e.Tags.ToList();

foreach(var oldTag in oldTags.Except(newTags))
{
    _enterpriseRepository.dbContext.DeleteObject(oldTag);
}

foreach(var newTag in newTags.Except(oldTags))
{
    e.Tags.Add(newTag);
}

Я предполагаю, что старые теги, которые находятся в коллекции newTags, являются одинаковыми экземплярами объекта. Если они совпадают по ключу сущности, вам придется реализовать IEqualityComparer для Except. Просто идея, не уверен, что это работает.

...