次のような datagridview とそれに添付された従業員のリストがあります。
IQueryable<Employee> data = (from em in db.Employees
where em.StationID == stationID
select em);
dgvView.DataSource = data;
今、データグリッドビューで選択した行で特定の従業員を削除したい:
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 では、特定の従業員を取得するためにデータベースへの追加の選択が 1 つ表示され、ステートメントから削除されます。
余分な選択ステートメントなしで datagridview から DataBoundItem から取得したときに、従業員を削除するにはどうすればよいですか? 私が見ることができる 1 つのアプローチは、ID で削除するカスタム sproc です。他の最善のアプローチがあるかもしれませんか?