Entity Framework 4 - Удалить объект - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть 3 таблицы в моей базе данных

CmsMasterPages
CmsMasterPagesAdvSlots (Pure Juction Table)
CmsAdvSlots

Вот изображение моего EDM:

enter image description here

Мне нужно найти все объекты, связанные с CmsAdvSlotCmsMasterPage (он работает в моем коде, опубликованном любимым), и УДАЛИТЬ результат (CmsAdvSlot) из базы данных.

Моя проблема Я не могу УДАЛИТЬ эти объекты когда я нашел тему.

Error: The object cannot be deleted because it was not found in the ObjectStateManager. 

        int findMasterPageId = Convert.ToInt32(uxMasterPagesListSelector.SelectedValue);
        CmsMasterPage myMasterPage = context.CmsMasterPages.FirstOrDefault(x => x.MasterPageId == findMasterPageId);
        var resultAdvSlots = myMasterPage.CmsAdvSlots;
        // It is working until here
        foreach (var toDeleteAdv in resultAdvSlots)
        {
            context.DeleteObject(myMasterPage.CmsAdvSlots.Any()); // ERORR HERE!!
            context.SaveChanges();
        }

Есть идеи, как ее решить?Спасибо за ваше время!: -)

Ответы [ 3 ]

5 голосов
/ 18 февраля 2011

Попробуйте это:

while (myMasterPage.CmsAdvSlots.Count > 0)
{
  var slot = myMasterPage.CmsAdvSlots.First();
  myMasterPage.CmsAdvSlots.Remove(slot); // This is required only in some scenarios - it depends on type of entities you are using.
  context.DeleteObject(slot);
}

context.SaveChanges();
0 голосов
/ 18 февраля 2011

In context.DeleteObject(myMasterPage.CmsAdvSlots.Any());
myMasterPage.CmsAdvSlots.Any() должен вернуть вам бул. Попробуйте использовать myMasterPage.CmsAdvSlots.First() вместо!

0 голосов
/ 18 февраля 2011

.Any() возвращает логическое значение. Вместо этого используйте .First(), .First() в вашем случае вернет первое CmsAdvSlot.

Если вы хотите удалить все CmsAdvSlot, я бы последовал примеру @Ladislav Mrnka.

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