Linq2sql: Как удалить сущность, извлекивая его из DataGridView?
-
04-10-2019 - |
Вопрос
У меня есть DatagridView и приложенный список сотрудников к нему, что это нравится:
IQueryable<Employee> data = (from em in db.Employees
where em.StationID == stationID
select em);
dgvView.DataSource = data;
Теперь я хочу удалить конкретный сотрудник по выбранной строке в DataGridView:
using (PetrolNetwork db = new PetrolNetwork())
{
Employee empl = (Employee)dgvView.CurrentRow.DataBoundItem;
db.Employees.DeleteOnSubmit(empl);
db.SubmitChanges();
}
Не удивительно, что у меня есть исключение "Не может удалить объект, который не был прикреплен."
Когда я заменяю этот код:
Employee employee = (from em in db.Employees
where em.ID == empl.ID
select em).Single();
db.Employees.DeleteOnSubmit(employee);
db.SubmitChanges();
все работает правильно, но В SQLPROFILER мы можем увидеть один дополнительный выбор для базы данных для получения нашего конкретного сотрудника, а затем удалить из оператора.
Как я могу удалить моего сотрудника, когда я получил его от DataboundiTem от DataGridView без каких-либо дополнительных выборов? Один из подходов, который я могу видеть, это пользовательский шрап, чтобы удалить по идентификатору. Может быть, есть какие-либо другие лучшие подходы?
Решение
К сожалению, с LinqtoSQL, вам нужно выбрать элемент для удаления перед его удалением.
Использование хранимых процедур, как вы упоминали, является одним из вариантов.
Другой использует L2S для выполнения Пользовательские выступления SQL.
result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")