Ядро бритвы asp.net вставляет несколько записей на пост - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать журнал электронной почты при отправке электронного письма.

Я создал цикл foreach для добавления записей в базу данных.

Однако я могу добавить только одну запись, когда await _context.SaveChangesAsync(); находится вне цикла.

Если я поместил await _context.SaveChangesAsync(); внутрь, я получаю следующую ошибку:

SqlException: Невозможно вставить явное значение для столбца идентификаторов в таблице 'EmailLog', когда для IDENTITY_INSERT установлено значение OFF

Код:

public async Task<IActionResult> OnPostAsync(IEnumerable<int> emailuser)
{
    //get login user
    var claimsIdentity = (ClaimsIdentity)this.User.Identity;
    var claim = claimsIdentity.FindFirst(ClaimTypes.Name);

    var TestAimItem = _context.AimItem.Where(x => emailuser.Contains(x.Id)).ToList();
    foreach (var item in TestAimItem.GroupBy(item => item.Email))
    {
        EmailMessage = await _context.EmailMessage.SingleOrDefaultAsync(m => m.Id == 2);
        string EmailAddress = (item.Key);
        var emailMessage1 = EmailMessage.MessageBody.Replace(Environment.NewLine, "<br/>");
        var linkHtml = "<a href=" + '"' + "https://" + EmailMessage.Link + '"' + ">here</a>";
        var emailMessage2 = emailMessage1.Replace("HPWDLINK", "click " + linkHtml);
        var emailMessage3 = emailMessage2.Replace("HPWDUSEREMAIL", EmailAddress);
        var emailMessage4 = HttpUtility.HtmlDecode(emailMessage3);

        await _emailSender.SendEmailAsync(To, EmailMessage.MessageSubject, emailMessage4);
    }

    foreach (var item1 in TestAimItem)
    {

        EmailLog.EmailDate = DateTime.Now;
        EmailLog.MessageId = 2;
        EmailLog.SentTo = item1.Email;
        EmailLog.SentBy = claim.Value;

        //submit record
        _context.EmailLog.Add(EmailLog);
        //await _context.SaveChangesAsync();

    }
    await _context.SaveChangesAsync();
    return RedirectToPage("/UserReporting/EmailUsersAnnualReport");
}
...