Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尽管已将对象附加到上下文,但是否仍收到错误?无法删除尚未附加的实体_C#_Linq_Linq To Sql - Fatal编程技术网

C# 尽管已将对象附加到上下文,但是否仍收到错误?无法删除尚未附加的实体

C# 尽管已将对象附加到上下文,但是否仍收到错误?无法删除尚未附加的实体,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我已将对象附加到上下文,尽管我遇到了错误无法删除尚未附加的实体。 if (itemRemove != -1) { //var deleteDetails = DBContext.ProductCustomizationMasters.Where(p => p.ProductID == this.ProductID && p.CustomCategoryID == catId && p.CustomType == (short)catTypeId).S

我已将对象附加到上下文,尽管我遇到了错误
无法删除尚未附加的实体。

if (itemRemove != -1)
{
    //var deleteDetails = DBContext.ProductCustomizationMasters.Where(p => p.ProductID == this.ProductID && p.CustomCategoryID == catId && p.CustomType == (short)catTypeId).Single();
    var deleteDetails = DBContext.ProductCustomizationMasters.Single(p => p.ProductID == this.ProductID && p.CustomCategoryID == catId && p.CustomType == (short)catTypeId);
    DBContext.ProductCustomizationMasters.Attach(deleteDetails);
    DBContext.ProductCustomizationMasters.DeleteOnSubmit(deleteDetails);
    RemoveCategoryItems(catId, catTypeId);
}


private void RemoveCategoryItems(int catId, CategoryType catTypeId)
        {
            switch (catTypeId)
            {
                case CategoryType.Topping:
                    (this.ToppingItems.Where(xx => xx.ToppingInfo.CatID == catId && xx.ProductID == this.ProductID).Single()).IsDefault = false;
                    FreeToppingItems.RemoveAll(x => x.ProductID == this.ProductID && x.ToppingInfo.CatID == catId);
                    break;
                case CategoryType.Dressing:
                    (this.DressingItems.Where(xx => xx.DressingInfo.CatID == catId && xx.ProductID == this.ProductID).Single()).IsDefault = false;
                    FreeDressingItems.RemoveAll(x => x.ProductID == this.ProductID && x.DressingInfo.CatID == catId);
                    break;
                case CategoryType.SpecialInstruction:
                    (this.InstructionItems.Where(xx => xx.InstructionInfo.CatID == catId && xx.ProductID == this.ProductID).Single()).IsDefault = false;
                    FreeInstructionItems.RemoveAll(x => x.ProductID == this.ProductID && x.InstructionInfo.CatID == catId);
                    break;
            }
        }
第一个想法-您不需要附加要删除的项目。该项已附加到上下文,并且状态正在管理中。只需跳过附加线并删除对象

编辑由于附加似乎不是您的问题,请尝试一下:

     if (itemRemove != -1)
     {
         var deleteDetails = DBContext.ProductCustomizationMasters.Single(p => p.ProductID == this.ProductID && p.CustomCategoryID == catId && p.CustomType == (short)catTypeId);
        //Obviously, this isn't going to work directly, you need to actually assign the ID, Primary Key Field here...
        var deleteMe = new ProductCustomizationMasters() { PrimaryKey = deleteDetails.PrimaryKey };
        DBContext.Attach(deleteMe);
        DBContext.DeleteOnSubmit(deleteMe);
        DBContext.SubmitChanges();

        RemoveCategoryItems(catId, catTypeId);
      }

再次编辑-您发布的代码似乎不是问题的根源。此代码之外的某些内容正在设置要从上下文中删除的对象,但尚未附加ant。我建议您重新检查代码,检查对“DeleteOnSubmit”的所有引用,并确保在标记这些实体时已附加这些实体。

您使用的查询提供程序是什么?为什么要附加这些实体?它已连接,因为您从未分离它?错误被抛出到哪里?在此方法或
RemoveCategoryItems
方法中?您不需要附加通过服务检索的实体,是在
DeleteOnSubmit()
上还是在调用
DBContext.SaveChanges()
时引发的错误。您还使用LINQ访问什么(SQL、SQLCE、ODATA等?),因为每个的实现略有不同。此时DBContext.ProductCustomizationMasters.DeleteOnSubmit(deleteDetails)抛出错误;尝试在调用
DeletOnSubmit
之后立即使用delete,至少现在是这样,看看它是否有效。如果是这样(它应该这样做),那么这将告诉您,您的问题在于其他地方的其他代码。也许你正在删除同一批中完全不同位置的另一个项目,这是你实际问题的根源。如果删除它,那么我也会犯同样的错误,这就是为什么我这样处理它。@NearroToDotnet他从来没有说过你应该分离它,他说你不应该附加它;两者都不做。是的,我跳过了//DBContext.ProductCustomizationMasters.Attach(deleteDetails)这一行;但是我遇到了相同的错误,无法删除尚未附加的实体。如果仍然出现该错误,您可能会开始查看RemoveCategoryItems代码。你能在原始问题中发布代码吗?好的,但这对集合有效。我把它放在问题中,我想它甚至不符合那种方法。。