LINQ Query正在删除多行而不是单行

时间:2015-10-02 11:10:48

标签: c# entity-framework linq

我尝试了以下内容:

var itemtoremove = db.ItemGroups.Single(x => x.ID == _id);
if (itemtoremove != null)
{
    db.ItemGroups.Remove(itemtoremove);
    db.SaveChanges();
}

查询“有效”但删除了多行!有任何想法吗?表本身是一组或非常糟糕的表的一部分,但我必须使用它们。 桌子上有多个键会影响EF的作用吗?

谢谢大家。

2 个答案:

答案 0 :(得分:2)

如果enitity具有导航属性而您尚未设置CascadeOnDelete(false);您可以删除多个项目。

//check item group for duplicates (just as a test)
var items = db.ItemGroups.Where(x => x.ID == _id); //breakpoint here to make sure there is only one match. If there is only one then you are deleting a linked item to the entity you are deleting.

var itemtoremove = db.ItemGroups.Single(x => x.ID == _id);
if (itemtoremove != null)
{
    db.ItemGroups.Remove(itemtoremove);
    db.SaveChanges();
}

答案 1 :(得分:0)

我找到了一个决议。 我认为桌面上有两个PK的设置(两个都在CHAR字段上)导致EF混淆。该表可以追溯到几年,它是一组表格的一部分,这些表格彼此无关。这很差,但这是另一个故事!

所以,我从头再次开始:

以原始格式重新导入表后,我执行了以下操作:

  • 删除了'GroupID'上的PK(绝不应该是PK)
  • 添加了ID列,将其设置为“IsIdentity”,以便自动生成ID
  • 刷新我的EF模型以包含:

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    

现在,只有在应用SaveChanges时才会删除一行。

感谢您的建议!