fix: Korrektur der Update- und Löschlogik in DbRepository zur Vermeidung von Laufzeitproblemen

This commit is contained in:
Developer 02 2025-04-22 17:33:55 +02:00
parent f1f5b9e16d
commit 8d98159ba8
2 changed files with 12 additions and 13 deletions

View File

@ -42,10 +42,10 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
{ {
var entities = await Entities.Where(expression).ToListAsync(ct); var entities = await Entities.Where(expression).ToListAsync(ct);
foreach (var entity in entities) for (int i = entities.Count - 1; i >= 0; i--)
{ {
Mapper.Map(dto, entity); Mapper.Map(dto, entities[i]);
Entities.Add(entity); Entities.Update(entities[i]);
} }
await Context.SaveChangesAsync(ct); await Context.SaveChangesAsync(ct);
@ -55,9 +55,9 @@ public class DbRepository<TDbContext, TEntity> : IRepository<TEntity> where TDbC
{ {
var entities = await Entities.Where(expression).ToListAsync(ct); var entities = await Entities.Where(expression).ToListAsync(ct);
foreach (var entity in entities) for (int i = entities.Count - 1; i >= 0; i--)
{ {
entities.Remove(entity); Entities.Remove(entities[i]);
} }
await Context.SaveChangesAsync(ct); await Context.SaveChangesAsync(ct);

View File

@ -22,7 +22,7 @@ public class DbRepositoryTests
builder.Services.AddDbContext<MockDbContext>(opt => opt.UseInMemoryDatabase("MockDB")); builder.Services.AddDbContext<MockDbContext>(opt => opt.UseInMemoryDatabase("MockDB"));
builder.Services.AddDbRepository<MockDbContext, User>(context => context.Users).UseAutoMapper(typeof(UserCreateDto), typeof(UserReadDto)); builder.Services.AddDbRepository<MockDbContext, User>(context => context.Users).UseAutoMapper(typeof(UserCreateDto), typeof(UserReadDto), typeof(UserBase));
builder.Services.AddAutoMapper(Assembly.GetExecutingAssembly()); builder.Services.AddAutoMapper(Assembly.GetExecutingAssembly());
@ -76,20 +76,19 @@ public class DbRepositoryTests
{ {
// Arrange // Arrange
var createdUser = await _userRepo.CreateAsync(Fake.UserCreateDto); var createdUser = await _userRepo.CreateAsync(Fake.UserCreateDto);
var readUser = await _userRepo.ReadFirstOrDefaultAsync(u => u.Id == createdUser.Id); var userUpdateDto = new UserUpdateDto() { Age = 10, Email = "Bar", FirstName = "Foo" };
// Act // Act
readUser!.FirstName = "Foo"; await _userRepo.UpdateAsync(userUpdateDto, u => u.Id == createdUser!.Id);
readUser!.Email = "Bar"; var upToDateUser = await _userRepo.ReadFirstOrDefaultAsync(u => u.Id == createdUser!.Id);
readUser!.Age = 10;
var upToDateUser = await _userRepo.ReadFirstOrDefaultAsync(u => u.Id == createdUser.Id);
// Assert // Assert
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(upToDateUser, Is.Not.Null); Assert.That(upToDateUser, Is.Not.Null);
Assert.That(upToDateUser, Is.EqualTo(readUser)); Assert.That(upToDateUser?.FirstName, Is.EqualTo(userUpdateDto.FirstName));
Assert.That(upToDateUser?.Email, Is.EqualTo(userUpdateDto.Email));
Assert.That(upToDateUser?.Age, Is.EqualTo(userUpdateDto.Age));
}); });
} }