У меня странная проблема, когда обновление некоторых записей в моей базе данных автоматически удаляет другие.
Модели:
public DbSet<Team> Teams { get; set; }
public DbSet<Member> Members { get; set; }
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedAt { get; set; }
public int Status { get; set; } // -1 = deleted, 0 = incomplete, 1 = completed (signup)
public Member Captain { get; set; }
}
public class Member
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Captain { get; set; }
public int Status { get; set; } // -1 = deleted, 0 = inactive, 1 = active
public int TeamId { get; set; }
[ForeignKey("TeamId")]
public Team Team { get; set; }
}
Команды в базе данных:
Id Name CreatedAt Status
1 Team 1 2019-07-10 09:32:12.123 1
2 Team 2 2019-07-10 11:24:39.456 0
Участники в базе данных:
Id FirstName LastName Captain Status TeamId
1 John Doe True 1 1
2 Jone Doe False 1 1
3 Foo Bar True 0 2
В процессе регистрации в команде новой команде присваивается статус 0, и после получения оплаты они обновляются со статусом 1. Когда регистрация команды завершена, капитанможет пригласить других участников присоединиться к команде.
Один раз в день я проверяю незавершенные команды (статус 0) и устанавливаю команду и связанного с ней участника (капитана) в статус -1:
public async Task<IActionResult> OnGetAsync()
{
var incompletedTeams = await _context.Teams.Include(x => x.Captain).Where(x => x.Status == 0 && (DateTime.Now - x.CreatedAt).Minutes > 30 && x.Captain.Captain).ToListAsync();
foreach (var team in incompletedTeams)
{
team.Status = -1;
team.Captain.Status = -1;
}
await _context.SaveChangesAsync();
[...]
}
Странно то, что когда я сохраняю эти изменения, Участник, который не является Капитаном, удаляется из базы данных. Статус члена команды (капитана) обновляется корректно.
Как это вообще возможно - и как этого избежать?