diff --git a/ComputerHardwareStore/ComputerHardwareStoreContracts/BindingModels/BuildBindingModel.cs b/ComputerHardwareStore/ComputerHardwareStoreContracts/BindingModels/BuildBindingModel.cs index 60ae196..e52972b 100644 --- a/ComputerHardwareStore/ComputerHardwareStoreContracts/BindingModels/BuildBindingModel.cs +++ b/ComputerHardwareStore/ComputerHardwareStoreContracts/BindingModels/BuildBindingModel.cs @@ -7,7 +7,7 @@ namespace ComputerHardwareStoreContracts.BindingModels public int Id { get; set; } public string Name { get; set; } = string.Empty; public double Price { get; set; } - public int VendorId { get; set; } + public IVendorModel Vendor { get; set; } public Dictionary BuildComponents { get; set; } = new(); public List Comments { get; set; } = new(); } diff --git a/ComputerHardwareStore/ComputerHardwareStoreContracts/ViewModels/BuildViewModel.cs b/ComputerHardwareStore/ComputerHardwareStoreContracts/ViewModels/BuildViewModel.cs index 0ddafa9..8274f6d 100644 --- a/ComputerHardwareStore/ComputerHardwareStoreContracts/ViewModels/BuildViewModel.cs +++ b/ComputerHardwareStore/ComputerHardwareStoreContracts/ViewModels/BuildViewModel.cs @@ -10,7 +10,7 @@ namespace ComputerHardwareStoreContracts.ViewModels public string Name { get; set; } = string.Empty; [DisplayName("Стоимость")] public double Price { get; set; } - public int VendorId { get; set; } + public IVendorModel Vendor { get; set; } public Dictionary BuildComponents { get; set; } = new(); public List Comments { get; set; } = new(); } diff --git a/ComputerHardwareStore/ComputerHardwareStoreDataModels/Models/IBuildModel.cs b/ComputerHardwareStore/ComputerHardwareStoreDataModels/Models/IBuildModel.cs index 6ae15ed..dee1777 100644 --- a/ComputerHardwareStore/ComputerHardwareStoreDataModels/Models/IBuildModel.cs +++ b/ComputerHardwareStore/ComputerHardwareStoreDataModels/Models/IBuildModel.cs @@ -4,7 +4,7 @@ { string Name { get; } double Price { get; } - int VendorId { get; } + IVendorModel Vendor { get; } public Dictionary BuildComponents { get; } public List Comments { get; } } diff --git a/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/ComputerHardwareStoreDBContext.cs b/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/ComputerHardwareStoreDBContext.cs index 84fa66a..8dac2da 100644 --- a/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/ComputerHardwareStoreDBContext.cs +++ b/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/ComputerHardwareStoreDBContext.cs @@ -36,5 +36,6 @@ namespace ComputerHardwareStoreDatabaseImplement public virtual DbSet OrderProducts { set; get; } public virtual DbSet BuildComponents { set; get; } public virtual DbSet Comments { set; get; } + public virtual DbSet Vendors { set; get; } } } diff --git a/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/Models/Build.cs b/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/Models/Build.cs index 38276ab..db68236 100644 --- a/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/Models/Build.cs +++ b/ComputerHardwareStore/ComputerHardwareStoreDatabaseImplement/Models/Build.cs @@ -2,6 +2,7 @@ using ComputerHardwareStoreContracts.BindingModels; using ComputerHardwareStoreContracts.ViewModels; using ComputerHardwareStoreDataModels.Models; +using Microsoft.EntityFrameworkCore.Metadata.Internal; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Runtime.InteropServices; @@ -15,9 +16,7 @@ namespace ComputerHardwareStoreDatabaseImplement.Models public string Name { get; set; } = string.Empty; [Required] public double Price { get; set; } - [Required] - public int VendorId { get; set; } - public virtual Vendor Vendor { get; private set; } = new(); + private Dictionary? _buildComponents = null; [NotMapped] public Dictionary BuildComponents @@ -36,10 +35,14 @@ namespace ComputerHardwareStoreDatabaseImplement.Models [ForeignKey("BuildId")] public virtual List Components { get; set; } = new(); [ForeignKey("BuildId")] + public virtual List Comments { get; set; } = new(); [NotMapped] List IBuildModel.Comments => Comments.Select(c => c as ICommentModel).ToList(); + public virtual Vendor Vendor { get; private set; } = new(); + IVendorModel IBuildModel.Vendor => Vendor as IVendorModel; + public static Build? Create(ComputerHardwareStoreDBContext context, BuildBindingModel model) { if (model == null) @@ -51,7 +54,16 @@ namespace ComputerHardwareStoreDatabaseImplement.Models Id = model.Id, Name = model.Name, Price = model.Price, - VendorId = model.VendorId, + Vendor = context.Vendors.First(v => v.Id == model.Vendor.Id), + Components = context.Components + .Where(c => model.BuildComponents.ContainsKey(c.Id)) + .Select(c => new BuildComponent() + { + BuildId = model.Id, + ComponentId = c.Id, + Component = c, + Count = model.BuildComponents[c.Id].Item2 + }).ToList() }; } @@ -60,7 +72,7 @@ namespace ComputerHardwareStoreDatabaseImplement.Models Id = Id, Name = Name, Price = Price, - VendorId = VendorId, + Vendor = Vendor, Comments = Comments.Select(c => c as ICommentModel).ToList(), BuildComponents = BuildComponents };