namespace Microsoft.eShopWeb.Infrastructure { using eShopWeb.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; public class CatalogContext : DbContext { public CatalogContext(DbContextOptions options) : base(options) { } public DbSet CatalogItems { get; set; } public DbSet CatalogBrands { get; set; } public DbSet CatalogTypes { get; set; } protected override void OnModelCreating(ModelBuilder builder) { builder.Entity(ConfigureCatalogBrand); builder.Entity(ConfigureCatalogType); builder.Entity(ConfigureCatalogItem); } void ConfigureCatalogItem(EntityTypeBuilder builder) { builder.ToTable("Catalog"); builder.Property(ci => ci.Id) .ForSqlServerUseSequenceHiLo("catalog_hilo") .IsRequired(); builder.Property(ci => ci.Name) .IsRequired(true) .HasMaxLength(50); builder.Property(ci => ci.Price) .IsRequired(true); builder.Property(ci => ci.PictureUri) .IsRequired(false); builder.HasOne(ci => ci.CatalogBrand) .WithMany() .HasForeignKey(ci => ci.CatalogBrandId); builder.HasOne(ci => ci.CatalogType) .WithMany() .HasForeignKey(ci => ci.CatalogTypeId); } void ConfigureCatalogBrand(EntityTypeBuilder builder) { builder.ToTable("CatalogBrand"); builder.HasKey(ci => ci.Id); builder.Property(ci => ci.Id) .ForSqlServerUseSequenceHiLo("catalog_brand_hilo") .IsRequired(); builder.Property(cb => cb.Brand) .IsRequired() .HasMaxLength(100); } void ConfigureCatalogType(EntityTypeBuilder builder) { builder.ToTable("CatalogType"); builder.HasKey(ci => ci.Id); builder.Property(ci => ci.Id) .ForSqlServerUseSequenceHiLo("catalog_type_hilo") .IsRequired(); builder.Property(cb => cb.Type) .IsRequired() .HasMaxLength(100); } } }