Идея: у меня есть сущность Ключевой, которая может быть заменена (повернута) другой Ключевой с задержкой.Я думал о реализации этого как:
class Key {
string Id;
string ReplacesId;
Key Replaces;
string ReplacedById;
Key ReplacedBy;
DateTime Expires;
// ...
}
Поэтому, когда я захочу заменить его, я создам другой ключ и затем буду ссылаться на новые и старые ключи друг на друга.И если кто-то из них будет удален, другой тоже будет.
И вот как я реализовал это отображение Fluent:
modelBuilder.Entity<Key>().HasOne(x => x.ReplacedBy)
.WithOne(x => x.Replaces)
.IsRequired(false)
.OnDelete(DeleteBehavior.Cascade);
Логика замены:
oldKey.ReplacedBy = newKey;
oldKey.ReplacedById = newKey.Id;
newKey.Replaces = oldKey;
newKey.ReplacesId = oldKey.Id;
_dbContext.Keys.Update(newKey);
_dbContext.Keys.Update(oldKey);
await _dbContext.SaveChangesAsync();
Но похоже, что ReplacedById
ReplacesId
или одно из них используются как обычные поля и не FK, потому что, когда я пытаюсь удалить одно из них, они не каскадируются.
МожетЯ делаю эту работу, или я должен просто ввести Rotations/Replacements
таблицу?