我有一个datagridview和附加的Employees列表,如下所示:
IQueryable<Employee> data = (from em in db.Employees
where em.StationID == stationID
select em);
dgvView.DataSource = data;
现在我想通过datagridview中的选定行删除特定的Employee:
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中我们可以看到一个额外的选择到数据库来检索我们的特定员工,然后从语句中删除。
如何删除我的员工,当我从datagridview从DataBoundItem得到它而没有任何额外的select语句?我可以看到的一种方法是按ID删除自定义sproc。可能还有其他最好的方法吗?
答案 0 :(得分:2)
不幸的是,使用LinqToSql,您需要在删除之前选择要删除的项目。
使用您提到的存储过程是一种选择。
另一个是使用L2S执行custom SQL statements。
result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")