1

我在我的代码中使用 Linq 进行插入、删除和更新数据库。使用 InsertOnSubmit 插入数据时,出现 cannot add an entity that already exists异常。请看看我的代码

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo)
{
   PRICE_SETTING priceSetting = new PRICE_SETTING();
   priceSetting = priceSettingsInfo;           
   DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSettingsInfo);          
   DataContext.CommonUsers.SubmitChanges();
}
4

3 回答 3

2

只需为新的 priceSetting 设置属性。

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo)
{
   PRICE_SETTING priceSetting = new PRICE_SETTING();
   //
   priceSetting.Prop1 = priceSettingsInfo.Prop1;
   priceSetting.Prop2 = priceSettingsInfo.Prop2;
   priceSetting.Prop3 = priceSettingsInfo.Prop3;
   // ...
   DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSetting );          
   DataContext.CommonUsers.SubmitChanges();
}
于 2012-07-26T12:50:49.320 回答
0

如果您AddNewPriceSettings()使用现有PRICE_SETTING对象进行调用,则确实是在尝试再次添加它。您方法中的第二行就是这样做的。然后,new PRICE_SETTING();您在第一行创建的将不再被引用,并且将被 GC 处理而无需尝试插入它。

如果要创建副本,则必须在插入和提交之前将其克隆priceSettingsInfo到变量中(您可以使用各种技术)。priceSetting

于 2012-07-26T12:42:00.350 回答
0
cannot add an entity that already exists

错误消息清楚地说明了问题。您的数据库中已经有一行包含与您尝试插入的实体相同的实体。

SQL 如何判断两个项目是否“相同”?它使用一个键列,通常是一个整数 id。

所以这导致我问你 - 你的列定义如何查找受影响的表?你从哪里得到PRICE_SETTING传递给方法的?

问题也可能是您试图对已经存在的对象执行更新——在这种情况下,您需要使用不同的方法。请分享有关上下文的更多信息。

于 2012-07-26T12:42:21.520 回答