我正在关注Pro ASP.NET MVC Framework中的体育商店示例,并且我收到了一个与我找不到的LINQ相关的异常。完整的代码可通过网站获得,但这里是传达问题的片段。LINQ to SQL ASP.NET MVC中的结果DuplicateKeyException
private Table<Product> productsTable;
// ...
public void SaveProduct(Product product) {
if (product.ProductID == 0)
productsTable.InsertOnSubmit(product);
else {
productsTable.Attach(product);
productsTable.Context.Refresh(RefreshMode.KeepCurrentValues, product);
}
productsTable.Context.SubmitChanges();
}
在UI,我更新现有的产品,然后单击保存和控制器通过调用SaveProduct(产品)处理后 - 其中,产品是通过参数传递。附加产品时会引发DuplicateKeyException。在调试器中,产品参数被初始化并且ID为2.
我不期待确切的答案,但我希望有人可以给我一些提示,以了解我在哪里可以解决这个问题。
UPDATE:下面的代码工作,但我仍然希望得到上面的附加方法工作。
public void SaveProduct(Product product) {
if (product.ProductID == 0)
productsTable.InsertOnSubmit(product);
else {
Product p2 = productsTable.Single(em => em.ProductID == product.ProductID);
p2.Name = product.Name;
p2.Description = product.Description;
p2.Price = product.Price;
p2.Category = product.Category;
}
productsTable.Context.SubmitChanges();
}
听起来像它可能试图做一个INSERT,当它应该做一个更新。您可以更新产品2,但不能插入另一个。 – DOK 2009-10-21 00:52:58