diff --git a/src/ApplicationCore/ApplicationCore.csproj b/src/ApplicationCore/ApplicationCore.csproj
index 57861cb..0253059 100644
--- a/src/ApplicationCore/ApplicationCore.csproj
+++ b/src/ApplicationCore/ApplicationCore.csproj
@@ -7,6 +7,7 @@
+
diff --git a/src/ApplicationCore/Entities/OrderAggregate/Address.cs b/src/ApplicationCore/Entities/OrderAggregate/Address.cs
index 1c9fd64..f5dfdac 100644
--- a/src/ApplicationCore/Entities/OrderAggregate/Address.cs
+++ b/src/ApplicationCore/Entities/OrderAggregate/Address.cs
@@ -1,4 +1,5 @@
-using System;
+using Microsoft.EntityFrameworkCore;
+using System;
namespace Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate
{
diff --git a/src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs b/src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs
index 8daed9f..760b2a8 100644
--- a/src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs
+++ b/src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs
@@ -1,4 +1,5 @@
using Ardalis.GuardClauses;
+using Microsoft.EntityFrameworkCore;
namespace Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate
{
diff --git a/src/Infrastructure/Data/CatalogContext.cs b/src/Infrastructure/Data/CatalogContext.cs
index 98168d0..021c0f4 100644
--- a/src/Infrastructure/Data/CatalogContext.cs
+++ b/src/Infrastructure/Data/CatalogContext.cs
@@ -1,11 +1,12 @@
-using Ardalis.EFCore.Extensions;
-using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.eShopWeb.ApplicationCore.Entities;
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
namespace Microsoft.eShopWeb.Infrastructure.Data
{
+
public class CatalogContext : DbContext
{
public CatalogContext(DbContextOptions options) : base(options)
@@ -22,11 +23,142 @@ namespace Microsoft.eShopWeb.Infrastructure.Data
protected override void OnModelCreating(ModelBuilder builder)
{
- base.OnModelCreating(builder);
- builder.ApplyAllConfigurationsFromCurrentAssembly();
+ //Intentionally rolling back this change to fix issue: https://github.com/dotnet-architecture/eShopOnWeb/issues/292
+ //Will follow up after issue has been resolved.
+ //base.OnModelCreating(builder);
+ //builder.ApplyAllConfigurationsFromCurrentAssembly();
// alternately this is built-in to EF Core 2.2
//builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
+
+ builder.Entity(ConfigureBasket);
+ builder.Entity(ConfigureCatalogBrand);
+ builder.Entity(ConfigureCatalogType);
+ builder.Entity(ConfigureCatalogItem);
+ builder.Entity(ConfigureOrder);
+ builder.Entity(ConfigureOrderItem);
+ builder.Entity(ConfigureAddress);
+ builder.Entity(ConfigureCatalogItemOrdered);
+ builder.Entity(ConfigureBasketItem);
+ }
+
+ private void ConfigureBasketItem(EntityTypeBuilder builder)
+ {
+ builder.Property(bi => bi.UnitPrice)
+ .IsRequired(true)
+ .HasColumnType("decimal(18,2)");
+ }
+
+ private void ConfigureCatalogItemOrdered(EntityTypeBuilder builder)
+ {
+ builder.Property(cio => cio.ProductName)
+ .HasMaxLength(50)
+ .IsRequired();
+ }
+
+ private void ConfigureAddress(EntityTypeBuilder builder)
+ {
+ builder.Property(a => a.ZipCode)
+ .HasMaxLength(18)
+ .IsRequired();
+
+ builder.Property(a => a.Street)
+ .HasMaxLength(180)
+ .IsRequired();
+
+ builder.Property(a => a.State)
+ .HasMaxLength(60);
+
+ builder.Property(a => a.Country)
+ .HasMaxLength(90)
+ .IsRequired();
+
+ builder.Property(a => a.City)
+ .HasMaxLength(100)
+ .IsRequired();
+ }
+
+ private void ConfigureBasket(EntityTypeBuilder builder)
+ {
+ var navigation = builder.Metadata.FindNavigation(nameof(Basket.Items));
+
+ navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
+ }
+
+ private 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)
+ .HasColumnType("decimal(18,2)");
+
+ 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);
+ }
+
+ private 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);
+ }
+
+ private 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);
+ }
+
+ private void ConfigureOrder(EntityTypeBuilder builder)
+ {
+ var navigation = builder.Metadata.FindNavigation(nameof(Order.OrderItems));
+
+ navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
+
+ builder.OwnsOne(o => o.ShipToAddress);
+ }
+
+ private void ConfigureOrderItem(EntityTypeBuilder builder)
+ {
+ builder.OwnsOne(i => i.ItemOrdered);
+
+ builder.Property(oi => oi.UnitPrice)
+ .IsRequired(true)
+ .HasColumnType("decimal(18,2)");
}
}
}