Два объекта с отношением один ко многим, так что в ваучере много деталей ваучера, проблема заключается в удалении одного элемента из коллекции связанных данных (детали ваучера) и последующем сохранении изменений, которые не удаляются из связанного объекта. таблица
Процедура удаления выглядит следующим образом:
var voucher = await _voucherRepository.GetCompleteVoucherAsync(Id);
var item = voucher.VoucherDetails.FirstOrDefault();
voucher.VoucherDetails.Remove(item);
_dbContext.Update(voucher);
await _dbContext.SaveChangesAsync();
А модель выглядит так:
public class Voucher : BaseEntity
{
public int Id {get; set;}
-----
public ICollection<VoucherDetail> VoucherDetails { get; set; }
}
public class VoucherDetail : BaseEntity
{
public int Id {get; set;}
-----
public int VoucherId { get; set; }
public Voucher Voucher { get; set; }
}
и вот контекст:
builder.HasOne(i => i.Voucher)
.WithMany(i => i.VoucherDetails)
.IsRequired().HasForeignKey(i => i.VoucherId)
.OnDelete(DeleteBehavior.Cascade);
Репозиторий:
public async Task<Voucher> GetCompleteVoucherAsync(int id)
{
return await _dbContext.Vouchers
.Include(i => i.VoucherSource)
.Include(i => i.VoucherDetails)
.ThenInclude(i => i.Assets)
.SingleOrDefaultAsync(s => s.Id == id);
}
При вышеупомянутой установке процедуры вставки и обновления отлично работают как для сущностей Voucher, так и / или VoucherDetails, только напрямую обновляя сущность Voucher.
но удаление элемента из коллекции сведений о ваучере, по-видимому, не вызывает оператора удаления для объекта сведений о ваучере.
Есть ли еще что-то, что я пропускаю?
Редактировать
Отредактировано, чтобы показать реализацию метода GetCompleteVoucherAsync