System.InvalidOperationException: „Ein zweiter Vorgang wurde für diese Kontextinstanz gestartet, bevor ein vorheriger Vorgang abgeschlossen wurde. Dies wird normalerweise dadurch verursacht, dass verschiedene Threads gleichzeitig dieselbe Instanz von DbContext verwenden.“
Dies ist mein Code im Dienst:
Code: Select all
public async Task UsersById(Guid userId, CancellationToken cancellationToken)
{
try
{
var Log = await _db.Users
.Include(x => x.University)
.Include(x => x.Fields)
.Where(x => x.UserId == userId)
.OrderByDescending(x => x.CreatedAt)
.AsNoTracking()
.ToListAsync();
var logsDTO = await Task.WhenAll(Log.Select(async x =>
{
var userInDb = await _db.Users.FindAsync((Guid)x.UserId);
var user = await _userService.GetDirectoryInformation(userInDb, cancellationToken);
return new GetAllUsersDTO()
{
Description = x.Description,
PostDate = x.PostDate,
Id = x.Id,
RecieveUserId = x.RecieveUserId,
UniversityId = x.UniversityId,
IsVisible = x.IsVisible,
IsApproved = x.IsApproved,
UserIdOpen = x.UserId,
UserName = user.UserName,
LogTitle = x.LogTitle,
LogNr = x.LogNr,
Email = user.Email,
};
}));
return logsDTO.AsQueryable();
}
catch (Exception ex)
{
Console.WriteLine("Error=", ex.Message);
throw;
}
}
Code: Select all
private readonly DataContext _db;
public UserService(DataContext context) : base(context)
{
_db = context;
}
Ich habe versucht, mein Dependency-Injection-Setup mit ServiceLifetime.Scoped zu konfigurieren, und es sieht so aus:
Code: Select all
builder.Services
.AddDbContext(opt =>
opt.UseSqlServer(builder.Configuration.GetConnectionString("connString"))
,ServiceLifetime.Scoped
);
Mobile version