2015-07-15 4 views
0

Это вопрос о Entity Framework (EF) версии 6.Удаление записей в таблице Junction В Entity Framework 6

У меня есть три таблицы. TableA, TableB и TableJ следующим образом:

TableA 
int Id (primary key) 

TableB 
int Id (primary key) 

TableJ 
int TableAId (primary key) 
int TableBId (primary key) 

Таблица J является узлом/отображение/многие-ко-многим таблице между Таблица А и В. Таблица Следует отметить, что нет никаких внешних ключей. Отображение таблиц в EF, у меня есть следующий код:

public partial class A 
{ 
    public int Id { get; set; } 
    public virtual DbSet<B> Bs { get; set; } 
} 

public partial class B 
{ 
    public int Id { get; set; } 
    public virtual DbSet<A> As { get; set; } 
} 

Проблема я столкнулся в том, что я не знаю, как удалить записи в стык/отображения/многие-ко-многим таблице. Например, этот код ничего не удалять:

var a = db.As.Find(id); 
a.Bs.Clear(); 
db.SaveChanges(); 

Что мне нужно сделать, чтобы удалить записи в узловой/отображения/многие-ко-многим таблице?

ответ

1

Clear() фактически не оказывает никакого влияния на объект с точки зрения контекста, он просто очищает коллекцию из любых существующих элементов в памяти; вместо того, чтобы вы могли бы сделать что-то вроде этого:

var a = db.As.Find(id); 
var removals = a.Bs.ToList(); //or you could filter to only remove B objects matching a specific criteria, etc. 
foreach (var remove in removals) 
{ 
    a.Bs.Remove(remove); 
} 
db.SaveChanges(); 

Это материализует все Bs в a, а затем удаляет каждый из a.Bs коллекции - тогда, когда вы SaveChanges объектов будут удалены из базы данных.

Кстати, по этой причине мы материализовать первый, потому что мы не можем и перечислить и удалить из a.Bs в то же время, или мы получим старый «Коллекцию модифицированную при перечислении» ошибки

Смежные вопросы