foreach (var objUser in responseToken.SpecificUsers.SpecificUsers)
{
flashObj.FlashSaleId = flashSalesObj.Id;
flashObj.MappingId = Convert.ToInt32(objUser);
flashObj.type = "Users";
flashObj.CreatedOnUTC = DateTime.Now;
_context.FlashSaleMapping.Add(flashObj);
_context.SaveChanges();
}
我使用此代码在启动时成功保存了第一个循环;第二次,我得到标题中提到的错误。
答案 0 :(得分:0)
您必须在每个循环中创建一个新对象
_context.SaveChanges(); 在第一个循环中生成一个新ID,但在所有其他循环中均保留此ID。除此之外,此foreach循环还会多次添加同一对象。
foreach (var objUser in responseToken.SpecificUsers.SpecificUsers)
{
var newFlashSaleMapping = new FlashSaleMapping();
newFlashSaleMapping.FlashSaleId = flashSalesObj.Id;
newFlashSaleMapping.MappingId = Convert.ToInt32(objUser);
newFlashSaleMapping.type = "Users";
newFlashSaleMapping.CreatedOnUTC = DateTime.Now;
_context.FlashSaleMapping.Add(newFlashSaleMapping);
}
_context.SaveChanges(); //bulk sav
//LINQ version
var newFlashSaleMappings = responseToken.SpecificUsers.SpecificUsers.Select((flashSalesObj) = >
new FlashSaleMapping() {
FlashSaleId = flashSalesObj.Id,
MappingId = Convert.ToInt32(objUser),
type = "Users",
CreatedOnUTC = DateTime.Now
});
_context.FlashSaleMapping.AddRange(newFlashSaleMapping);
_context.FlashSaleMapping.SaveChanges();