Переопределить циклическую зависимость Entity Framework CoreC#

Место общения программистов C#
Anonymous
Переопределить циклическую зависимость Entity Framework Core

Сообщение Anonymous »

У меня есть структура таблицы (упрощенная):
public class Record
{
public Guid? Id { get; set; }
public virtual IList StatusInstances { get; set; } = default!;
public Guid? CurrentStatusId { get; set; } = default!;
public virtual StatusInstance CurrentStatus { get; set; } = default!;
}

public class StatusInstance
{
public Guid? RecordId { get; set; }
}

Я хотел бы добавить как в список, так и в один экземпляр. У меня есть похожие таблицы, и я бы тоже хотел работать таким же образом, но, очевидно, это приводит к циклическому предупреждению о зависимостях.
Что я пробовал и работает:
  • < li>Я могу добавить запись с текущим статусом, но не добавляю ее в список и не добавляю идентификатор записи. Затем я могу добавить последующий новый статус после создания записи, но первый статус будет потерян.
  • Я могу добавить запись без какого-либо статуса ни в список, ни в текущий, а затем добавить к обоим после первоначальное сохранение, однако из-за уникального способа работы приложения это невозможно.
  • Я мог бы удалить текущий статус и сохранить все в списке, однако из-за того, как я использую структуру сущностей, я нужна недвижимость с отношениями один к одному. Я могу настроить запись, чтобы выбрать первый статус в качестве свойства, однако для этого мне нужно получить полный список, а затем сначала выбрать. Не хочу для этого получать полный список.
Поскольку кажется возможным обойти проблемы циклических зависимостей, сохраняя в определенном порядке, я Я уверен, что должен быть способ сделать это при первом сохранении. Несмотря на то, что я могу найти обходные пути вокруг этого, было бы очень удобно использовать эту связь во всей системе.
Для справки у меня есть этот код в OnModelCreating
modelBuilder.Entity().HasOne(r => r.CurrentStatus).WithOne().HasForeignKey(r => r.CurrentStatusId);
modelBuilder.Entity().HasMany(r => r.StatusInstances).WithOne().HasForeignKey(r => r.RecordId);


Подробнее здесь: https://stackoverflow.com/questions/791 ... dependency

Вернуться в «C#»