using BankContracts.BindingModels; using BankContracts.ViewModels; using BankDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace BankDataBaseImplement.Models { public class Additions : IAdditionsModel { [Required] public string AdditionsName { get; set; } = string.Empty; [Required] public double AdditionsPrice { get; set; } public int ClercId { get; private set; } public int Id { get; private set; } public virtual Clerc Clerc { get; set; } [ForeignKey("AdditionId")] public virtual List<Room> Rooms { get; set; } [ForeignKey("AdditionId")] public virtual List<AdditionsMember> Members { get; set; } private Dictionary<int, IMemberModel> _AdditionsMembers = null; public Dictionary<int, IMemberModel> AdditionsMembers { get { if (_AdditionsMembers == null) { _AdditionsMembers = Members.ToDictionary(recPC => recPC.MemberId, recPC => (recPC.Member as IMemberModel)); } return _AdditionsMembers; } } public static Additions Create(BankDataBase context, AdditionsBindingModel model) { return new Additions() { Id = model.Id, AdditionsName = model.AdditionsName, AdditionsPrice = model.AdditionsPrice, Members = model.AdditionsMembers.Select(x => new AdditionsMember { Member = context.Members.First(y => y.Id == x.Key), }).ToList() }; } public void Update(AdditionsBindingModel model) { AdditionsName = model.AdditionsName; AdditionsPrice = model.AdditionsPrice; } public AdditionsViewModel GetViewModel => new() { Id = Id, AdditionsName = AdditionsName, AdditionsPrice = AdditionsPrice, AdditionsMembers = AdditionsMembers }; public void UpdateMembers(BankDataBase context, AdditionsBindingModel model) { var AdditionMembers = context.AdditionsMembers.Where(rec => rec.AdditionsId == model.Id).ToList(); if (AdditionMembers != null) { context.AdditionsMembers.RemoveRange(AdditionMembers.Where(rec => !model.AdditionsMembers.ContainsKey(rec.MemberId))); context.SaveChanges(); } var Addition = context.Additions.First(x => x.Id == Id); foreach (var cm in model.AdditionsMembers) { context.AdditionsMembers.Add(new AdditionsMember { Additions = Addition, Member = context.Members.First(x => x.Id == cm.Key) }); context.SaveChanges(); } _AdditionsMembers = null; } } }