实体框架更新/插入

时间:2014-03-23 11:12:02

标签: entity-framework

我们使用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无法跟踪具有相同对象的多个对象   键。

1 个答案:

答案 0 :(得分:0)

我对代码感到有些惊讶。在EF6中不起作用。 无论如何: 如果找不到,Single将返回1个条目或异常。 EF 4.x有SingleOrDefault,如果找不到则返回null。

IEnumerable.Single扩展返回T. 你确定T支持Any()。?

显然,错误是您无法将记录放入上下文两次。 如果单个工作但Any()测试没有,那可能会解释。

请参阅SingleOrDefault。 考虑测试Null而不是任何。