我们使用EF 4.0执行数据库操作。我们使用以下代码将产品保存到数据库:
public void SaveProduct(Product updatedProduct)
{
using (model)
{
Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
if(originalProduct.Any())
{
model.Products.ApplyCurrentValues(updatedProduct);
}
else
{
model.Products.Attach(updatedProdut);
}
model.SaveChanges();
}
}
但在附加产品时,我收到以下错误:
ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法跟踪具有相同对象的多个对象 键。
答案 0 :(得分:0)
我对代码感到有些惊讶。在EF6中不起作用。
无论如何:
如果找不到,Single
将返回1个条目或异常。
EF 4.x有SingleOrDefault,如果找不到则返回null。
IEnumerable.Single扩展返回T. 你确定T支持Any()。?
显然,错误是您无法将记录放入上下文两次。 如果单个工作但Any()测试没有,那可能会解释。
请参阅SingleOrDefault。 考虑测试Null而不是任何。