LINQ to Entities удаляет все записи в отношении многие ко многим - PullRequest
1 голос
/ 18 октября 2011

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

У меня есть3 таблицы MySql: Students, Classes и StudentsInClasses.

. Entity Framework преобразует их в две сущности Student и Class, каждая из которых связана с другой со многими для многихсвойство навигации (например, Student.Classes).

Но нет сущности StudentsInClasses, поэтому , как лучше всего вызывать, используя LINQ to Entities, эквивалент SQL :

DELETE FROM StudentsInClasses;

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

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 18 октября 2011

Во-первых: насколько я знаю, вы не можете удалить данные с помощью EF без предварительной загрузки этих данных.

Во-вторых: вы можете использовать ADO или POCO (выше EF.4):

 try
        {
            using (testEntities db = new testEntities())
            {                    
                db.ExecuteStoreCommand<returnClass>("DELETE FROM StudentsInClasses;", NULL);
            }
        }
        catch (Exception ex) { _Exceptions.ManageExceptions(ex);}
1 голос
/ 18 октября 2011

Если вам не нравится выполнять команду хранилища, как предложил Paperjam, вы также можете создать хранимую процедуру для этого.Это было бы красиво сопоставлено со статической типизированной функцией в вашем ObjectContext.

0 голосов
/ 19 декабря 2012
Student.Class.Clear()

Это так просто! Просто сохраните изменения, и в таблице «многие ко многим» для этого учащегося не будет записей.

0 голосов
/ 18 октября 2011

Если у вас есть сомнения по поводу сопоставления EF, вы можете проверить файл метаданных. Эти файлы обычно присутствуют в каталоге obj/Debug/edmxResourcesToEmbed вашего проекта. Файл метаданных yourEntities.msl определяет отображение между объектами и таблицами. В этом файле вы должны найти, что Students.Classes сопоставлен с таблицей StudentInClasses, поэтому удаление записей в этом списке и сохранение «Учеников» равнозначно удалению строк в таблице «StudentInClasses».

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