Удаление нескольких записей в EF CTP5 - PullRequest
0 голосов
/ 09 марта 2011

У меня есть класс Person:

public class Person {
    public int Id { get; set; }

    public int DeptId { get; set; }

    public decimal Salary { get; set; }
}

В базе данных Id и DeptId помечены как первичные ключи.

Я пытался удалить все записи из базы данных, где значение DeptId соответствует x (входная переменная.)

Если я получу доступ к таким записям:

var people = Database.People.Where(p => p.DeptId = 10);

Каков наилучший способ удалить все такие записи (без использования итераций)?

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Поскольку ваш Person имеет сложный PK из Id и DepId, ваша модель должна содержать идентифицирующее отношение. В таком случае вы также можете сделать это:

var dep = Database.Departments
                  .Include(d => d.People)
                  .Where(d => d.Id == 10)
                  .Single();
dep.People.Clear();
Database.SaveChanges();

Это будет то же самое, что удаление людей в итерации, потому что EF не может пакетировать команды. Это удалит каждого человека в отдельном туда-обратно в БД. Если в отделе действительно много людей, позвоните по этому номеру:

Database.Database.SqlCommand("DELETE FROM People WHERE DepId = {0}", 10); 
1 голос
/ 09 марта 2011
people.ToList().ForEach(p => Database.DeleteObject(p));
Database.SaveChanges();
...