C# 除去未跟踪和断开连接的购物车条目,您需要将其附加到您的数据上下文(使其被跟踪),然后在提交时将其标记为删除。提交更改时,购物车条目将被正确删除,不会导致异常

C# 除去未跟踪和断开连接的购物车条目,您需要将其附加到您的数据上下文(使其被跟踪),然后在提交时将其标记为删除。提交更改时,购物车条目将被正确删除,不会导致异常,c#,linq-to-sql,entityset,C#,Linq To Sql,Entityset,有关该问题的更多详细信息,请查看: 您是在谈论Linq SQl还是Linq to Entities??在添加/删除配料对象时,您的新Reciepe对象是否属于DataContext?否(当配方为新配方时)和是(当配方为现有配方时,从DB检索并向其添加配料)。我实现了以下确切代码:)如前所述,它适用于从内存和数据库中删除的配料记录(加载配方时删除从数据库中加载的配料)。它不适用于刚在内存中创建和删除的新未提交代码。上面的代码处理刚在内存中创建和删除的新未提交代码(它不是示例代码-我从实时生产应用程

有关该问题的更多详细信息,请查看:

您是在谈论Linq SQl还是Linq to Entities??在添加/删除配料对象时,您的新Reciepe对象是否属于DataContext?否(当配方为新配方时)和是(当配方为现有配方时,从DB检索并向其添加配料)。我实现了以下确切代码:)如前所述,它适用于从内存和数据库中删除的配料记录(加载配方时删除从数据库中加载的配料)。它不适用于刚在内存中创建和删除的新未提交代码。上面的代码处理刚在内存中创建和删除的新未提交代码(它不是示例代码-我从实时生产应用程序中复制和粘贴了代码,并更改了类型和变量的名称)。最初创建配料时,您是否调用InsertOnSubmit?您做到了!我确实将新的配料对象添加到了Recipe对象的EntitySet集合中,但没有调用InsertOnSubmit,因为它似乎什么都不做。但你的建议解决了问题。非常感谢你!澄清一点:我(1)将数据从数据库拉到内存集合。(2) 将该集合绑定到GUI。(3) 在内存集合中添加、更改和删除数据。(4) 当用户按Save时,通过LINQ提交回DB。问题在于创建、添加、删除(从未提交)的集合成员调用DataContext.GetChanges()似乎解决了案例1中的问题。你也不需要用第一种方法建立关系。@NeilBarnwell你找到解决方法了吗?@Roland我从来没有找到过,没有。如果你到达黑暗塔,请回来告诉我们,嗯?;)@谢谢你的反应。看来我自己找到了解决办法:漫长的白天和愉快的夜晚。。。
        try
        {
            // Needed for existing records, but will fail for new records
            yourLINQDataContext.Ingredients.DeleteOnSubmit(ingredient);
        }
        catch (Exception)
        {
            // Swallow
        }

        yourRecipeObject.Ingredients.Remove(ingredient);
 RetailAccountCustomerCard racc = new RetailAccountCustomerCard();

 Card addedCard = _idc.Cards.Where(c => c.CardId == card.CardId).ToList().First();

 racc.Card = addedCard;

 this.CurrentCustomer.RetailAccountCardsBindingList.Add(racc); 

 // Some code triggered by the user before saving to the db

 CurrentCustomer.RetailAccountCardsBindingList.Remove(racc);
 RetailAccountCustomerCard racc = new RetailAccountCustomerCard();

 racc.CardId = card.CardId;  // note that I have set the Id property not the object

 this.CurrentCustomer.RetailAccountCardsBindingList.Add(racc); 


 // Some code triggered by the user before saving to the db

 CurrentCustomer.RetailAccountCardsBindingList.Remove(racc);
// Create new entities
Cart c = new Cart();
CartEntry ce = new CartEntry();
ce.Cart = c;

// Delete the entry
c.CartEntries.Remove(ce);
dc.Cartentries.Attach(ce);
dc.CartEntries.DeleteOnSubmit(ce);

// Insert the cart into database
dc.Carts.InsertOnSubmit(c);
dc.SubmitChanges();