Skip to content

Commit 0d0b812

Browse files
committed
Merge branch 'EntityTypeConfigurationOnEFCore2' into netcore2
2 parents 7d502c0 + 70e429b commit 0d0b812

18 files changed

Lines changed: 462 additions & 322 deletions

src/Services/Catalog/Catalog.API/Catalog.API.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313

1414
<ItemGroup>
15+
<Content Update="appsettings.json">
16+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
17+
</Content>
1518
<Content Update="wwwroot;">
1619
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
1720
</Content>
Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
22
{
3-
using EntityFrameworkCore.Metadata.Builders;
43
using Microsoft.EntityFrameworkCore;
4+
using EntityConfigurations;
55
using Model;
6-
using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF;
76

87
public class CatalogContext : DbContext
98
{
@@ -16,68 +15,9 @@ public CatalogContext(DbContextOptions<CatalogContext> options) : base(options)
1615

1716
protected override void OnModelCreating(ModelBuilder builder)
1817
{
19-
builder.Entity<CatalogBrand>(ConfigureCatalogBrand);
20-
builder.Entity<CatalogType>(ConfigureCatalogType);
21-
builder.Entity<CatalogItem>(ConfigureCatalogItem);
18+
builder.ApplyConfiguration(new CatalogBrandEntityTypeConfiguration());
19+
builder.ApplyConfiguration(new CatalogTypeEntityTypeConfiguration());
20+
builder.ApplyConfiguration(new CatalogItemEntityTypeConfiguration());
2221
}
23-
24-
void ConfigureCatalogItem(EntityTypeBuilder<CatalogItem> builder)
25-
{
26-
builder.ToTable("Catalog");
27-
28-
builder.Property(ci => ci.Id)
29-
.ForSqlServerUseSequenceHiLo("catalog_hilo")
30-
.IsRequired();
31-
32-
builder.Property(ci => ci.Name)
33-
.IsRequired(true)
34-
.HasMaxLength(50);
35-
36-
builder.Property(ci => ci.Price)
37-
.IsRequired(true);
38-
39-
builder.Property(ci => ci.PictureFileName)
40-
.IsRequired(false);
41-
42-
builder.Ignore(ci => ci.PictureUri);
43-
44-
builder.HasOne(ci => ci.CatalogBrand)
45-
.WithMany()
46-
.HasForeignKey(ci => ci.CatalogBrandId);
47-
48-
builder.HasOne(ci => ci.CatalogType)
49-
.WithMany()
50-
.HasForeignKey(ci => ci.CatalogTypeId);
51-
}
52-
53-
void ConfigureCatalogBrand(EntityTypeBuilder<CatalogBrand> builder)
54-
{
55-
builder.ToTable("CatalogBrand");
56-
57-
builder.HasKey(ci => ci.Id);
58-
59-
builder.Property(ci => ci.Id)
60-
.ForSqlServerUseSequenceHiLo("catalog_brand_hilo")
61-
.IsRequired();
62-
63-
builder.Property(cb => cb.Brand)
64-
.IsRequired()
65-
.HasMaxLength(100);
66-
}
67-
68-
void ConfigureCatalogType(EntityTypeBuilder<CatalogType> builder)
69-
{
70-
builder.ToTable("CatalogType");
71-
72-
builder.HasKey(ci => ci.Id);
73-
74-
builder.Property(ci => ci.Id)
75-
.ForSqlServerUseSequenceHiLo("catalog_type_hilo")
76-
.IsRequired();
77-
78-
builder.Property(cb => cb.Type)
79-
.IsRequired()
80-
.HasMaxLength(100);
81-
}
8222
}
8323
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure.EntityConfigurations
6+
{
7+
class CatalogBrandEntityTypeConfiguration
8+
: IEntityTypeConfiguration<CatalogBrand>
9+
{
10+
public void Configure(EntityTypeBuilder<CatalogBrand> builder)
11+
{
12+
builder.ToTable("CatalogBrand");
13+
14+
builder.HasKey(ci => ci.Id);
15+
16+
builder.Property(ci => ci.Id)
17+
.ForSqlServerUseSequenceHiLo("catalog_brand_hilo")
18+
.IsRequired();
19+
20+
builder.Property(cb => cb.Brand)
21+
.IsRequired()
22+
.HasMaxLength(100);
23+
}
24+
}
25+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure.EntityConfigurations
6+
{
7+
class CatalogItemEntityTypeConfiguration
8+
: IEntityTypeConfiguration<CatalogItem>
9+
{
10+
public void Configure(EntityTypeBuilder<CatalogItem> builder)
11+
{
12+
builder.ToTable("Catalog");
13+
14+
builder.Property(ci => ci.Id)
15+
.ForSqlServerUseSequenceHiLo("catalog_hilo")
16+
.IsRequired();
17+
18+
builder.Property(ci => ci.Name)
19+
.IsRequired(true)
20+
.HasMaxLength(50);
21+
22+
builder.Property(ci => ci.Price)
23+
.IsRequired(true);
24+
25+
builder.Property(ci => ci.PictureFileName)
26+
.IsRequired(false);
27+
28+
builder.Ignore(ci => ci.PictureUri);
29+
30+
builder.HasOne(ci => ci.CatalogBrand)
31+
.WithMany()
32+
.HasForeignKey(ci => ci.CatalogBrandId);
33+
34+
builder.HasOne(ci => ci.CatalogType)
35+
.WithMany()
36+
.HasForeignKey(ci => ci.CatalogTypeId);
37+
}
38+
}
39+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure.EntityConfigurations
6+
{
7+
class CatalogTypeEntityTypeConfiguration
8+
: IEntityTypeConfiguration<CatalogType>
9+
{
10+
public void Configure(EntityTypeBuilder<CatalogType> builder)
11+
{
12+
builder.ToTable("CatalogType");
13+
14+
builder.HasKey(ci => ci.Id);
15+
16+
builder.Property(ci => ci.Id)
17+
.ForSqlServerUseSequenceHiLo("catalog_type_hilo")
18+
.IsRequired();
19+
20+
builder.Property(cb => cb.Type)
21+
.IsRequired()
22+
.HasMaxLength(100);
23+
}
24+
}
25+
}
File renamed without changes.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Marketing.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure.EntityConfigurations
6+
{
7+
class CampaignEntityTypeConfiguration
8+
: IEntityTypeConfiguration<Campaign>
9+
{
10+
public void Configure(EntityTypeBuilder<Campaign> builder)
11+
{
12+
builder.ToTable("Campaign");
13+
14+
builder.HasKey(m => m.Id);
15+
16+
builder.Property(m => m.Id)
17+
.ForSqlServerUseSequenceHiLo("campaign_hilo")
18+
.IsRequired();
19+
20+
builder.Property(m => m.Name)
21+
.HasColumnName("Name")
22+
.IsRequired();
23+
24+
builder.Property(m => m.From)
25+
.HasColumnName("From")
26+
.IsRequired();
27+
28+
builder.Property(m => m.To)
29+
.HasColumnName("To")
30+
.IsRequired();
31+
32+
builder.Property(m => m.Description)
33+
.HasColumnName("Description")
34+
.IsRequired();
35+
36+
builder.Property(m => m.PictureUri)
37+
.HasColumnName("PictureUri")
38+
.IsRequired();
39+
40+
builder.HasMany(m => m.Rules)
41+
.WithOne(r => r.Campaign)
42+
.HasForeignKey(r => r.CampaignId)
43+
.IsRequired();
44+
}
45+
}
46+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Marketing.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure.EntityConfigurations
6+
{
7+
class RuleEntityTypeConfiguration
8+
: IEntityTypeConfiguration<Rule>
9+
{
10+
public void Configure(EntityTypeBuilder<Rule> builder)
11+
{
12+
builder.ToTable("Rule");
13+
14+
builder.HasKey(r => r.Id);
15+
16+
builder.Property(r => r.Id)
17+
.ForSqlServerUseSequenceHiLo("rule_hilo")
18+
.IsRequired();
19+
20+
builder.HasDiscriminator<int>("RuleTypeId")
21+
.HasValue<UserProfileRule>(RuleType.UserProfileRule.Id)
22+
.HasValue<PurchaseHistoryRule>(RuleType.PurchaseHistoryRule.Id)
23+
.HasValue<UserLocationRule>(RuleType.UserLocationRule.Id);
24+
25+
builder.Property(r => r.Description)
26+
.HasColumnName("Description")
27+
.IsRequired();
28+
}
29+
}
30+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
3+
using Microsoft.eShopOnContainers.Services.Marketing.API.Model;
4+
5+
namespace Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure.EntityConfigurations
6+
{
7+
class UserLocationRuleEntityTypeConfiguration
8+
: IEntityTypeConfiguration<UserLocationRule>
9+
{
10+
public void Configure(EntityTypeBuilder<UserLocationRule> builder)
11+
{
12+
builder.Property(r => r.LocationId)
13+
.HasColumnName("LocationId")
14+
.IsRequired();
15+
}
16+
}
17+
}
Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure
22
{
3+
using EntityConfigurations;
34
using Microsoft.EntityFrameworkCore;
4-
using Microsoft.EntityFrameworkCore.Metadata.Builders;
55
using Microsoft.eShopOnContainers.Services.Marketing.API.Model;
66

77
public class MarketingContext : DbContext
@@ -16,72 +16,9 @@ public MarketingContext(DbContextOptions<MarketingContext> options) : base(optio
1616

1717
protected override void OnModelCreating(ModelBuilder builder)
1818
{
19-
builder.Entity<Campaign>(ConfigureCampaigns);
20-
builder.Entity<Rule>(ConfigureRules);
21-
builder.Entity<UserLocationRule>(ConfigureUserLocationRules);
22-
}
23-
24-
void ConfigureCampaigns(EntityTypeBuilder<Campaign> builder)
25-
{
26-
builder.ToTable("Campaign");
27-
28-
builder.HasKey(m => m.Id);
29-
30-
builder.Property(m => m.Id)
31-
.ForSqlServerUseSequenceHiLo("campaign_hilo")
32-
.IsRequired();
33-
34-
builder.Property(m => m.Name)
35-
.HasColumnName("Name")
36-
.IsRequired();
37-
38-
builder.Property(m => m.From)
39-
.HasColumnName("From")
40-
.IsRequired();
41-
42-
builder.Property(m => m.To)
43-
.HasColumnName("To")
44-
.IsRequired();
45-
46-
builder.Property(m => m.Description)
47-
.HasColumnName("Description")
48-
.IsRequired();
49-
50-
builder.Property(m => m.PictureUri)
51-
.HasColumnName("PictureUri")
52-
.IsRequired();
53-
54-
builder.HasMany(m => m.Rules)
55-
.WithOne(r => r.Campaign)
56-
.HasForeignKey(r => r.CampaignId)
57-
.IsRequired();
58-
}
59-
60-
void ConfigureRules(EntityTypeBuilder<Rule> builder)
61-
{
62-
builder.ToTable("Rule");
63-
64-
builder.HasKey(r => r.Id);
65-
66-
builder.Property(r => r.Id)
67-
.ForSqlServerUseSequenceHiLo("rule_hilo")
68-
.IsRequired();
69-
70-
builder.HasDiscriminator<int>("RuleTypeId")
71-
.HasValue<UserProfileRule>(RuleType.UserProfileRule.Id)
72-
.HasValue<PurchaseHistoryRule>(RuleType.PurchaseHistoryRule.Id)
73-
.HasValue<UserLocationRule>(RuleType.UserLocationRule.Id);
74-
75-
builder.Property(r => r.Description)
76-
.HasColumnName("Description")
77-
.IsRequired();
78-
}
79-
80-
void ConfigureUserLocationRules(EntityTypeBuilder<UserLocationRule> builder)
81-
{
82-
builder.Property(r => r.LocationId)
83-
.HasColumnName("LocationId")
84-
.IsRequired();
19+
builder.ApplyConfiguration(new CampaignEntityTypeConfiguration());
20+
builder.ApplyConfiguration(new RuleEntityTypeConfiguration());
21+
builder.ApplyConfiguration(new UserLocationRuleEntityTypeConfiguration());
8522
}
8623
}
8724
}

0 commit comments

Comments
 (0)