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);
foreach (var entity in entities)
for (int i = entities.Count - 1; i >= 0; i--)
{
Mapper.Map(dto, entity);
Entities.Add(entity);
Mapper.Map(dto, entities[i]);
Entities.Update(entities[i]);
}
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);
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);

View File

@ -22,7 +22,7 @@ public class DbRepositoryTests
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());
@ -76,20 +76,19 @@ public class DbRepositoryTests
{
// Arrange
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
readUser!.FirstName = "Foo";
readUser!.Email = "Bar";
readUser!.Age = 10;
var upToDateUser = await _userRepo.ReadFirstOrDefaultAsync(u => u.Id == createdUser.Id);
await _userRepo.UpdateAsync(userUpdateDto, u => u.Id == createdUser!.Id);
var upToDateUser = await _userRepo.ReadFirstOrDefaultAsync(u => u.Id == createdUser!.Id);
// Assert
Assert.Multiple(() =>
{
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));
});
}