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