Linq2sql: Как удалить сущность, извлекивая его из DataGridView?

StackOverflow https://stackoverflow.com/questions/3776278

Вопрос

У меня есть 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'")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top