需要说明,为何EF核心为何需要立即使用附加功能

问题描述

代码可以在一个月或更长时间内正常运行
这是HttpPost Api端点将用户添加用户

var user = await _userManager.FindByEmailAsync(model.Email.toupper()).ConfigureAwait(false);

// if user not finded or not activated return response

var userUserGroups = await _context.UserGroupsUsers
                    .Where(ugu => ugu.User == user)
                    .Select(w => w.UserGroup)
                    .ToListAsync()
                    .ConfigureAwait(false);

var userGroupsForAdd = promoCodeUserGroups.Where(w => userUserGroups.All(x => x.Id != w.Id)).ToList();

if (!userGroupsForAdd.Any())
{
   //return response
}

await _context.UserGroupsUsers
                    .AddRangeAsync(
                        userGroupsForAdd.Select(
                            w => new UserGroupUser
                            {
                                User = user,UserGroup = w
                            }));

await _context.SaveChangesAsync().ConfigureAwait(false);
//return response all fine

但昨天开始出现错误Cannot insert duplicate key in object 'db.AspNetUsers'

Microsoft.EntityFrameworkCore.Database.Command - Failed executing DbCommand (18ms) [Parameters=[@p0='?' (Size = 450),@p1='?' (DbType = Int32),@p2='?' (Size = 4000),@p3='?' (DbType = DateTime2),@p4='?' (Size = 64),@p5='?' (Size = 4000),@p6='?' (DbType = Boolean),@p7='?' (DbType = Boolean),@p8='?' (DbType = Boolean),@p9='?' (DbType = DateTimeOffset),@p10='?' (Size = 64),@p11='?' (Size = 256),@p12='?' (Size = 256),@p13='?' (Size = 4000),@p14='?' (Size = 4000),@p15='?' (DbType = Boolean),@p16='?' (Size = 4000),@p17='?' (Size = 4000),@p18='?' (DbType = Boolean),@p19='?' (Size = 256)],CommandType='Text',CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [cat].[AspNetUsers] ([Id],[AccessFailedCount],[ConcurrencyStamp],[CreatedAt],[Email],[EmailConfirmationCode],[EmailConfirmed],[IsActive],[LockoutEnabled],[LockoutEnd],[Name],[normalizedEmail],[normalizedUserName],[PasswordHash],[PhoneNumber],[PhoneNumberConfirmed],[ResetPasswordConfirmationCode],[SecurityStamp],[TwoFactorEnabled],[UserName])
VALUES (@p0,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19);
System.Data.sqlClient.sqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK_AspNetUsers'. Cannot insert duplicate key in object 'db.AspNetUsers'. The duplicate key value is ({some guid}).

我已将其修复..仅将附件用于用户用户

var isUserInContext = _context.Users.Local.Any(w => w.Id == user.Id);
if (!isUserInContext)
    _context.Users.Attach(user);

foreach (var userGroup in userGroupsForAdd)
{
    var isUserGroupInContext 
        = _context.UserGroups.Local.Any(w => w.Id == userGroup.Id);
    if (!isUserGroupInContext)
        _context.UserGroups.Attach(userGroup);

    var newUserGroupUser 
        = new UserGroupUser
          {
              User = user,UserGroup = userGroup
          };

    await _context.UserGroupsUsers.AddAsync(newUserGroupUser);
}

await _context.SaveChangesAsync().ConfigureAwait(false);

但是我不明白为什么它可以正常工作
服务器从Windows移到linux
但是错误也开始出现在我的Windows机器上

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)