问题描述
此代码可以在一个月或更长时间内正常运行
这是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 (将#修改为@)