using PrecastConcretePlantContracts.BindingModels; using PrecastConcretePlantContracts.ViewModels; using PrecastConcretePlantDataModels.Models; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; namespace PrecastConcretePlantDataBaseImplement.Models { public class Shop : IShopModel { public int Id { get; set; } [Required] public string ShopName { get; set; } = string.Empty; [Required] public string Address { get; set; } = string.Empty; [Required] public DateTime DateOpening { get; set; } [Required] public int ReinforcedsMax { get; set; } private Dictionary? _shopReinforceds = null; [NotMapped] public Dictionary ShopReinforceds { get { if (_shopReinforceds == null) { _shopReinforceds = Reinforceds .ToDictionary(x => x.ReinforcedId, x => (x.Reinforced as IReinforcedModel, x.Count)); } return _shopReinforceds; } } //3ий вопрос [ForeignKey("ShopId")]//список записей класса-связи public virtual List Reinforceds { get; set; } = new(); public static Shop Create(PrecastConcretePlantDataBase context, ShopBindingModel model) { return new Shop() { Id = model.Id, ShopName = model.ShopName, Address = model.Address, DateOpening = model.DateOpening, ReinforcedsMax = model.ReinforcedsMax, Reinforceds = model.ShopReinforceds.Select(x => new ShopReinforced { Reinforced = context.Reinforceds.First(y => y.Id == x.Key), Count = x.Value.Item2 }).ToList() }; } public void Update(ShopBindingModel model) { ShopName = model.ShopName; Address = model.Address; DateOpening = model.DateOpening; ReinforcedsMax = model.ReinforcedsMax; } public ShopViewModel GetViewModel => new() { Id = Id, ShopName = ShopName, Address = Address, DateOpening = DateOpening, ReinforcedsMax = ReinforcedsMax, ShopReinforceds = ShopReinforceds }; public void UpdateReinforceds(PrecastConcretePlantDataBase context, ShopBindingModel model) { var shopReinforceds = context.ShopReinforceds.Where(rec => rec.ShopId == model.Id).ToList(); if (shopReinforceds != null && shopReinforceds.Count > 0) { context.ShopReinforceds.RemoveRange(shopReinforceds.Where(rec => !model.ShopReinforceds.ContainsKey(rec.ReinforcedId))); context.SaveChanges(); foreach (var updateReinforced in shopReinforceds) { if (model.ShopReinforceds.ContainsKey(updateReinforced.ReinforcedId)) { updateReinforced.Count = model.ShopReinforceds[updateReinforced.ReinforcedId].Item2; model.ShopReinforceds.Remove(updateReinforced.ReinforcedId); } } context.SaveChanges(); } var shop = context.Shops.First(x => x.Id == Id); foreach (var ic in model.ShopReinforceds) { context.ShopReinforceds.Add(new ShopReinforced { Shop = shop, Reinforced = context.Reinforceds.First(x => x.Id == ic.Key), Count = ic.Value.Item2 }); context.SaveChanges(); } _shopReinforceds = null; } } }