Browse Source

Rolling back change to use extension method to wiret up config

- The change is a better way to do the configuration, but there is
currently an issue where the Value Objects are not being honored and
being treated like Entitys. When this happens, the container will throw
errors when trying to start up because the entitys are lacking primary
keys (when they don't need them).
main
Eric Fleming 6 years ago
parent
commit
d4993abd5f
  1. 1
      src/ApplicationCore/Entities/OrderAggregate/Address.cs
  2. 1
      src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs
  3. 140
      src/Infrastructure/Data/CatalogContext.cs

1
src/ApplicationCore/Entities/OrderAggregate/Address.cs

@ -3,7 +3,6 @@ using System;
namespace Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate namespace Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate
{ {
[Owned]
public class Address // ValueObject public class Address // ValueObject
{ {
public String Street { get; private set; } public String Street { get; private set; }

1
src/ApplicationCore/Entities/OrderAggregate/CatalogItemOrdered.cs

@ -7,7 +7,6 @@ namespace Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate
/// Represents a snapshot of the item that was ordered. If catalog item details change, details of /// Represents a snapshot of the item that was ordered. If catalog item details change, details of
/// the item that was part of a completed order should not change. /// the item that was part of a completed order should not change.
/// </summary> /// </summary>
[Owned]
public class CatalogItemOrdered // ValueObject public class CatalogItemOrdered // ValueObject
{ {
public CatalogItemOrdered(int catalogItemId, string productName, string pictureUri) public CatalogItemOrdered(int catalogItemId, string productName, string pictureUri)

140
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;
using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate; using Microsoft.eShopWeb.ApplicationCore.Entities.BasketAggregate;
using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate; using Microsoft.eShopWeb.ApplicationCore.Entities.OrderAggregate;
namespace Microsoft.eShopWeb.Infrastructure.Data namespace Microsoft.eShopWeb.Infrastructure.Data
{ {
public class CatalogContext : DbContext public class CatalogContext : DbContext
{ {
public CatalogContext(DbContextOptions<CatalogContext> options) : base(options) public CatalogContext(DbContextOptions<CatalogContext> options) : base(options)
@ -22,11 +23,142 @@ namespace Microsoft.eShopWeb.Infrastructure.Data
protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)
{ {
base.OnModelCreating(builder); //Intentionally rolling back this change to fix issue: https://github.com/dotnet-architecture/eShopOnWeb/issues/292
builder.ApplyAllConfigurationsFromCurrentAssembly(); //Will follow up after issue has been resolved.
//base.OnModelCreating(builder);
//builder.ApplyAllConfigurationsFromCurrentAssembly();
// alternately this is built-in to EF Core 2.2 // alternately this is built-in to EF Core 2.2
//builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); //builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
builder.Entity<Basket>(ConfigureBasket);
builder.Entity<CatalogBrand>(ConfigureCatalogBrand);
builder.Entity<CatalogType>(ConfigureCatalogType);
builder.Entity<CatalogItem>(ConfigureCatalogItem);
builder.Entity<Order>(ConfigureOrder);
builder.Entity<OrderItem>(ConfigureOrderItem);
builder.Entity<Address>(ConfigureAddress);
builder.Entity<CatalogItemOrdered>(ConfigureCatalogItemOrdered);
builder.Entity<BasketItem>(ConfigureBasketItem);
}
private void ConfigureBasketItem(EntityTypeBuilder<BasketItem> builder)
{
builder.Property(bi => bi.UnitPrice)
.IsRequired(true)
.HasColumnType("decimal(18,2)");
}
private void ConfigureCatalogItemOrdered(EntityTypeBuilder<CatalogItemOrdered> builder)
{
builder.Property(cio => cio.ProductName)
.HasMaxLength(50)
.IsRequired();
}
private void ConfigureAddress(EntityTypeBuilder<Address> 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<Basket> builder)
{
var navigation = builder.Metadata.FindNavigation(nameof(Basket.Items));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
}
private void ConfigureCatalogItem(EntityTypeBuilder<CatalogItem> 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<CatalogBrand> 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<CatalogType> 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<Order> builder)
{
var navigation = builder.Metadata.FindNavigation(nameof(Order.OrderItems));
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
builder.OwnsOne(o => o.ShipToAddress);
}
private void ConfigureOrderItem(EntityTypeBuilder<OrderItem> builder)
{
builder.OwnsOne(i => i.ItemOrdered);
builder.Property(oi => oi.UnitPrice)
.IsRequired(true)
.HasColumnType("decimal(18,2)");
} }
} }
} }

Loading…
Cancel
Save