using BankContracts.BindingModels; using BankContracts.ViewModels; using BankDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BankDataBaseImplement.Models { public class ConferenceBooking : IConferenceBookingModel { public int ClientId { get; private set; } public int ConferenceId { get; private set; } public int Id { get; private set; } public virtual Client Client { get; set; } public virtual Conference Conference { get; set; } [ForeignKey("ConferenceBookingId")] public virtual List<ConferenceBookingDinner> Credits { get; set; } private Dictionary<int, ICreditModel> _conferenceBookingDinners = null; public Dictionary<int, ICreditModel> ConferenceBookingDinners { get { if (_conferenceBookingDinners == null) { _conferenceBookingDinners = Credits.ToDictionary(recPC => recPC.DinnerId, recPC => (recPC.Credit as ICreditModel)); } return _conferenceBookingDinners; } } public static ConferenceBooking Create(BankDataBase context, ConferenceBookingBindingModel model) { return new ConferenceBooking() { Id = model.Id, Credits = model.ConferenceBookingDinners.Select(x => new ConferenceBookingDinner { Credit = context.Credits.First(y => y.Id == x.Key), }).ToList() }; } public void Update(ConferenceBookingBindingModel model) { } public ConferenceBookingViewModel GetViewModel => new() { Id = Id, ConferenceBookingDinners = ConferenceBookingDinners }; public void UpdateDinners(BankDataBase context, ConferenceBookingBindingModel model) { var conferenceBookingDinners = context.ConferenceBookingDinners.Where(rec => rec.ConferenceBookingId == model.Id).ToList(); if (conferenceBookingDinners != null) { context.ConferenceBookingDinners.RemoveRange(conferenceBookingDinners.Where(rec => !model.ConferenceBookingDinners.ContainsKey(rec.DinnerId))); context.SaveChanges(); } var conferenceBooking = context.ConferenceBookings.First(x => x.Id == Id); foreach (var cm in model.ConferenceBookingDinners) { context.ConferenceBookingDinners.Add(new ConferenceBookingDinner { ConferenceBooking = conferenceBooking, Credit = context.Credits.First(x => x.Id == cm.Key) }); context.SaveChanges(); } _conferenceBookingDinners = null; } } }