Мне нужна помощь в том, как приступить к записи вставки во многих ситуациях. Сначала я думал о том, как это сделать, но я смог найти собственное решение для вставки. Но это не удалось при сохранении из-за того, что столбец isDeleted не найден в таблице соединений PatientCentre. Идея состоит в том, что пациент может войти в любой из центров, назначенных для
Вот как мой код выглядит как
Вот моя модель пациента и центра с таблицей соединения (PatientCentre)
public class Patient
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime CreatedAt { get; set; }
public virtual ICollection<PatientCentre> PatientCentres { get; set; }
public Patient()
{
PatientCentres = new HashSet<PatientCentre>();
}
}
public class Centre
{
public int Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public bool IsActive { get; set; }
public DateTime Created { get; set; }
public virtual ICollection<PatientCentre> PatientCentres { get; set; }
public Centre()
{
PatientCentres = new HashSet<PatientCentre>();
}
}
public class PatientCentre
{
public long PatientId { get; set; }
public int CentreId { get; set; }
public Patient Patient { get; set; }
public Centre Centre { get; set; }
}
Вот моя таблица отношений FluentAPI для соединительной таблицы
public class PatientCentreConfiguration : IEntityTypeConfiguration<PatientCentre>
{
public void Configure(EntityTypeBuilder<PatientCentre> builder)
{
builder.HasKey(pc => new { pc.CentreId, pc.PatientId });
builder.HasOne(pc => pc.Centre)
.WithMany(c => c.PatientCentres)
.HasForeignKey(pc => pc.CentreId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(pc => pc.Patient)
.WithMany(p => p.PatientCentres)
.HasForeignKey(pc => pc.PatientId)
.OnDelete(DeleteBehavior.Restrict);
}
}
Вот таблица пациента, имеющая флаг isDeleted. Я не включил это в свою модель, так как хотел скрыть это
public class PatientConfiguration : IEntityTypeConfiguration<Patient>
{
public void Configure(EntityTypeBuilder<Patient> builder)
{
builder.HasKey(p => p.Id);
builder.Property<bool>("IsDeleted");
builder.HasQueryFilter(m => EF.Property<bool>(m, "IsDeleted") == false);
}
}
Вот моя логика добавления новых записей. Из моего контроллера я сначала перемещаю центры в список типа PatientCentre, а затем передаю их на уровень данных для обработки.
public async Task<Patient> CreatePatientV22(Patient patientForCreation, List<PatientCentre> patientCentres)
{
_context.Patients.Add(patientForCreation);
if (patientCentres.Count > 0)
{
foreach (var item in patientCentres)
{
var patientCentre = new PatientCentre
{
CentreId = item.CentreId,
PatientId = patientForCreation.Id
};
patientForCreation.PatientCentres.Add(patientCentre);
}
}
await _context.SaveChangesAsync();
return patientForCreation;
}
У меня также есть изменения сохранения, поскольку я выполняю мягкое удаление на столе пациента,
Исключение, которое я получил в своей трассировке стека: System.InvalidOperationException: не удалось найти свойство IsDeleted для типа сущности PatientCentre. Убедитесь, что свойство существует и включено в модель.
Я понимаю, что ошибка понятна, но для меня не имеет особого смысла включать столбец isDeleted на соединении (PatientCentre)стол, потому что после того, как у пациента установлен флажок, я не вижу записи. Я попытался проверить похожие случаи в Интернете, в которых также реализованы отношения «многие ко многим» и «мягкое удаление», но безрезультатно.
Кажется, довольно много кода, чтобы показать, но я просто хотел уточнить, что у меня есть и как лучше, чтобы кто-нибудь мог дать мне идею, как решить эту проблему.
Пожалуйста, как лучшемогу ли я продолжить это.
Ценю любые отзывы.