LINQ2SQL: как удалить сущность, извлекая ее из таблицы данных? - PullRequest
1 голос
/ 23 сентября 2010

У меня есть обзор данных и прикрепленный к нему список сотрудников, что-то вроде этого:

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 без каких-либо дополнительных операторов выбора?Один подход, который я вижу, это пользовательский sproc для удаления по идентификатору.Может быть есть какие-то другие лучшие подходы?

1 Ответ

2 голосов
/ 23 сентября 2010

К сожалению, с LinqToSql, вам нужно выбрать элемент для удаления перед его удалением.

Использование хранимых процедур, как вы упомянули, является одним из вариантов.

Другой вариант - использование L2S для выполнения пользовательских операторов SQL .

result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")
...