.NET Ein zweiter Vorgang wurde für diese Kontextinstanz gestartet, bevor ein vorheriger Vorgang abgeschlossen wurdeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 .NET Ein zweiter Vorgang wurde für diese Kontextinstanz gestartet, bevor ein vorheriger Vorgang abgeschlossen wurde

Post by Anonymous »

Ich erhalte diesen Fehler:

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;
}
}
So füge ich DataContext in diesen Dienst ein:

Code: Select all

private readonly DataContext _db;
public UserService(DataContext context) : base(context)
{
_db = context;
}
Hinweis: Dieser Dienst funktioniert nur, wenn die Protokollliste nur ein Daten zurückgibt. Aber wenn es mehr als eine Daten zurückgibt, löst es den Fehler aus.
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
);

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post