using Contracts.BindingModels; using Contracts.ViewModels; using DataModels.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; using System.Xml.Linq; namespace DatabaseImplement.Models { public class Machine : IMachineModel { public int Id { get; private set; } [Required] public string Title { get; private set; } = string.Empty; [Required] public string Country { get; private set; } = string.Empty; [Required] public int UserId { get; private set; } private Dictionary? _workerMachines = null; [NotMapped] public Dictionary? WorkerMachines { get { if (_workerMachines == null) { _workerMachines = Workers.ToDictionary(recDP => recDP.WorkerId, recDp => (recDp.Worker as IWorkerModel)); } return _workerMachines; } } [ForeignKey("WorkerId")] public virtual List Workers { get; set; } = new(); public virtual Guarantor Guarantor { get; set; } public static Machine? Create(MachineBindingModel model, FactoryGoWorkDatabase context) { return new Machine() { Id = model.Id, Title = model.Title, Country = model.Country, UserId = model.UserId, Workers = model.MachineWorker.Select(x => new WorkerMachine { Worker = context.Workers.First(y => y.Id == x.Key), }).ToList(), }; } public void Update(MachineBindingModel model) { Title = model.Title; Country = model.Country; } public MachineViewModel GetViewModel => new() { Id = Id, Title = Title, Country = Country, UserId = UserId, WorkerMachines = WorkerMachines }; public void UpdateWorkers(FactoryGoWorkDatabase context, MachineBindingModel model) { var machineWorkers = context.WorkerMachines.Where(rec => rec.MachineId == model.Id).ToList(); if (machineWorkers != null && machineWorkers.Count > 0) { context.WorkerMachines.RemoveRange(machineWorkers.Where(rec => !model.MachineWorker.ContainsKey(rec.WorkerId))); context.SaveChanges(); foreach (var upWorker in machineWorkers) { model.MachineWorker.Remove(upWorker.WorkerId); } context.SaveChanges(); } var machine = context.Machines.First(x => x.Id == model.Id); foreach (var dp in model.MachineWorker) { context.WorkerMachines.Add(new WorkerMachine { Machine = machine, Worker = context.Workers.First(x => x.Id == dp.Key) }); context.SaveChanges(); } _workerMachines = null; } } }