当IDENTITY_INSERT设置为OFF时,无法为表'FlashSaleMapping'中的标识列插入显式值

时间:2019-11-27 13:40:48

标签: c# asp.net-mvc entity-framework

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();
}

我使用此代码在启动时成功保存了第一个循环;第二次,我得到标题中提到的错误。

1 个答案:

答案 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();