Когда вы назвали это:
p.Customers.Clear();
p.Workers.Clear();
p.Materials.Clear();
Вы заметили, потому что это работает только в том случае, если коллекции заполнены, более того, если эти отношения один-ко-многим, вам также нужно будет уменьшить (вызов Remove
)на каждом отдельном зависимом объекте.Для заполнения этих коллекций вы должны либо использовать готовую загрузку
long selectedValue = cb_Projects.SelectedValue;
Project p = db.Projects.Include(p => p.Customers)
.Include(p => p.Workers)
.Include(p => p.Materials)
.Single(p => p.ProjectID == selectedValue);
, либо пометить все три свойства как virtual
, чтобы включить отложенную загрузку.
Ваш текущий код должен обрабатываться каскадным удалением.
Это также не имеет особого смысла:
if (db.Entry(p).State == EntityState.Detached)
{
db.Projects.Attach(p);
}
Вы ищете проект в новом экземпляре контекста, поэтому он всегда будет загружаться из базы данных, и его состояние будетUnchanged
.