N: M отношение и удаление записей - PullRequest
0 голосов
/ 10 июня 2009

У меня есть три таблицы: Context, Component и ComponentContext. Таблица ComponentContext связывает Компонент и Контекст в отношении N: M.

Я работаю над проектом C #, который импортирует кучу данных в эти таблицы. Он использует модель Entity, и в результате в моем коде я вижу только сущность Component и сущность Context.

Теперь, используя только эти объекты, можно ли удалить содержимое всех трех таблиц? Я мог бы, например, использовать это:

foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); }

Чтобы удалить все записи контекста. (CPE - это модель сущности Context.) Это, конечно, дает сбой, поскольку Context имеет отношения к компонентам. Поэтому мне нужен другой метод.

(И да, я могу использовать SQL, чтобы сделать то же самое, но это для "Доказательства юзабилити" для модели сущностей, поэтому я хочу сделать это как можно больше внутри модели.)

1 Ответ

0 голосов
/ 10 июня 2009

И тогда я заметил глупость, которую я сделал в своем коде. Он жаловался на ссылку на другую таблицу в качестве причины, чтобы не удалять записи контекста. Так как я только что добавил новую таблицу ComponentContext, я ее обвинил, но в следующий раз я должен действительно внимательно прочитать эти сообщения об ошибках. (Была еще одна таблица, связанная с таблицей контекста.)

В любом случае, чтобы удалить эти отношения, этого кода достаточно:

foreach (var obj in CPE.Components.ToList())
{
    obj.Context.Load();
    foreach (var child in obj.Context.ToList()) { obj.Context.Remove(child); }
    CPE.DeleteObject(obj);
}

Я использую ToList () по привычке, кстати. Это имеет тенденцию избегать нескольких исключений, связанных с направлением, в котором .NET будет читать записи. Теперь он сначала заполняет список, затем идет по списку в любом направлении, которое я предпочитаю ...

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