Linq to sql Linq到SQL最佳实践:已删除的实体未真正被删除

Linq to sql Linq到SQL最佳实践:已删除的实体未真正被删除,linq-to-sql,Linq To Sql,作为LinqtoSQL的新手,我今天遇到了一个难题,我想分享我的解决方案,然后问是否有更好的解决方案 我正在为我的工作建立一个员工分配工具。有三个基本类/表:员工、项目、任务。重要的是,在这里,任务充当员工和项目之间的连接表。我在包含绑定到BindingList的DataGridView的表单上遇到了问题。当用户决定创建一个新的工作分配时,问题就出现了,但在保存更改之前,他们决定删除刚刚创建的新工作分配。不幸的是,保存导致已删除的作业无论如何都要保存 下面是我的朴素删除处理程序的一个(稍微简化)

作为LinqtoSQL的新手,我今天遇到了一个难题,我想分享我的解决方案,然后问是否有更好的解决方案

我正在为我的工作建立一个员工分配工具。有三个基本类/表:员工、项目、任务。重要的是,在这里,任务充当员工和项目之间的连接表。我在包含绑定到BindingList的DataGridView的表单上遇到了问题。当用户决定创建一个新的工作分配时,问题就出现了,但在保存更改之前,他们决定删除刚刚创建的新工作分配。不幸的是,保存导致已删除的作业无论如何都要保存

下面是我的朴素删除处理程序的一个(稍微简化)版本:

//Assume that assignments is the BindingList<Assignment> bound
//to the dataGridView
private void DeletedRowHandler(object sender, EventArgs e)
{
    DataGridViewRow row = dataGridView.GetSelectedRow();
    Assignment assignment = (Assignment) row.DataBoundItem();
    assignments.Remove(assignment);

    try
    {
        db.Intervals.DeleteOnSubmit(assignment);
    }
    catch
    {
    }

}    
assignment.Employee = null;
assignment.Project = null;
这似乎有效

我的问题:这就是你应该做的吗?还是有我不知道的更干净的方法


注意:在写这个问题时,我得到了一个友好的、自动的通知,这个问题可能会被关闭。如果您决定关闭它,请告诉我原因并给我指出一个好的方向。

如果可以,建议按ID删除。让DataContext通过其键找到实体,并将该实体提供给Delete方法

DeleteAssignment(someRowID);

...
public void DeleteAssignment(int assignmentID)
{
    db.Assignments.DeleteOnSubmit(
       db.Assignments.SingleOrDefault(a=>a.ID==assignmentID)
    );
    db.SubmitChanges();
}