using System.ComponentModel.DataAnnotations.Schema; using HotelContracts.BindingModels; using HotelContracts.ViewModels; using HotelDataModels.Models; namespace HotelDatabaseImplement.Models; public class Cleaning : ICleaningModel { public int Id { get; set; } public DateTime Date { get; set; } public int RoomId { get; set; } [ForeignKey("CleaningId")] public virtual List CleaningInstrument { get; set; } = new(); private Dictionary? _cleaningInstruments = null; [NotMapped] public Dictionary CleaningInstruments { get { _cleaningInstruments ??= CleaningInstrument .ToDictionary( x => x.CleaningInstrumentsId, x => x.CleaningInstruments as ICleaningInstrumentsModel ); return _cleaningInstruments; } } public static Cleaning Create(HotelDataBase dataBase, CleaningBindingModel model) { return new Cleaning { Id = model.Id, Date = model.Date, CleaningInstrument = model.CleaningInstruments.Select( x => new CleaningInstrument { CleaningInstruments = dataBase.CleaningInstruments.First(y => y.Id == x.Key) }).ToList() }; } public void Update(CleaningBindingModel model) { Date = model.Date; } public void UpdateCleaningInstruments(HotelDataBase dataBase, CleaningBindingModel model) { var cleaningInstruments = dataBase.CleaningInstrument .Where(x => x.CleaningId == model.Id) .ToList(); dataBase.CleaningInstrument.RemoveRange( cleaningInstruments.Where(x => !model.CleaningInstruments.ContainsKey(x.CleaningInstrumentsId)) ); dataBase.SaveChanges(); foreach (var toUpdate in cleaningInstruments) { model.CleaningInstruments.Remove(toUpdate.CleaningInstrumentsId); } dataBase.SaveChanges(); var cleaning = dataBase.Cleanings.First(x => x.Id == Id); foreach (var cleaningInstrument in model.CleaningInstruments) { dataBase.CleaningInstrument.Add(new CleaningInstrument { Cleaning = cleaning, CleaningInstruments = dataBase.CleaningInstruments .First(x => x.Id == cleaningInstrument.Key) }); dataBase.SaveChanges(); } _cleaningInstruments = null; } public CleaningViewModel GetView => new CleaningViewModel { Id = Id, Date = Date, CleaningInstruments = CleaningInstruments }; }