diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 329f4cbdc..b00a9bd09 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -18,6 +18,7 @@ + diff --git a/src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.Designer.cs b/src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.Designer.cs similarity index 96% rename from src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.Designer.cs rename to src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.Designer.cs index be6929ef5..145b48ff7 100644 --- a/src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.Designer.cs +++ b/src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.Designer.cs @@ -10,7 +10,7 @@ namespace FilterLists.Api.Migrations { [DbContext(typeof(FilterListsDbContext))] - [Migration("20180206183743_InitialReCreate")] + [Migration("20180207235556_InitialReCreate")] partial class InitialReCreate { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -97,9 +97,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("FilterListId", "LanguageId"); - b.HasIndex("LanguageId", "FilterListId") - .IsUnique(); - b.ToTable("filterlists_languages"); }); @@ -115,9 +112,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("FilterListId", "MaintainerId"); - b.HasIndex("MaintainerId", "FilterListId") - .IsUnique(); - b.ToTable("filterlists_maintainers"); }); @@ -133,9 +127,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("ForkFilterListId", "UpstreamFilterListId"); - b.HasIndex("UpstreamFilterListId", "ForkFilterListId") - .IsUnique(); - b.ToTable("forks"); }); @@ -151,9 +142,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("MergeFilterListId", "UpstreamFilterListId"); - b.HasIndex("UpstreamFilterListId", "MergeFilterListId") - .IsUnique(); - b.ToTable("merges"); }); @@ -169,9 +157,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("SnapshotId", "RuleId"); - b.HasIndex("RuleId", "SnapshotId") - .IsUnique(); - b.ToTable("snapshots_rules"); }); @@ -187,9 +172,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasKey("SoftwareId", "SyntaxId"); - b.HasIndex("SyntaxId", "SoftwareId") - .IsUnique(); - b.ToTable("software_syntaxes"); }); diff --git a/src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.cs b/src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.cs similarity index 93% rename from src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.cs rename to src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.cs index 805c631a9..fa3b2515c 100644 --- a/src/FilterLists.Api/Migrations/20180206183743_InitialReCreate.cs +++ b/src/FilterLists.Api/Migrations/20180207235556_InitialReCreate.cs @@ -348,46 +348,10 @@ protected override void Up(MigrationBuilder migrationBuilder) table: "filterlists", column: "SyntaxId"); - migrationBuilder.CreateIndex( - name: "IX_filterlists_languages_LanguageId_FilterListId", - table: "filterlists_languages", - columns: new[] { "LanguageId", "FilterListId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_filterlists_maintainers_MaintainerId_FilterListId", - table: "filterlists_maintainers", - columns: new[] { "MaintainerId", "FilterListId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_forks_UpstreamFilterListId_ForkFilterListId", - table: "forks", - columns: new[] { "UpstreamFilterListId", "ForkFilterListId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_merges_UpstreamFilterListId_MergeFilterListId", - table: "merges", - columns: new[] { "UpstreamFilterListId", "MergeFilterListId" }, - unique: true); - migrationBuilder.CreateIndex( name: "IX_snapshots_FilterListId", table: "snapshots", column: "FilterListId"); - - migrationBuilder.CreateIndex( - name: "IX_snapshots_rules_RuleId_SnapshotId", - table: "snapshots_rules", - columns: new[] { "RuleId", "SnapshotId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_software_syntaxes_SyntaxId_SoftwareId", - table: "software_syntaxes", - columns: new[] { "SyntaxId", "SoftwareId" }, - unique: true); } protected override void Down(MigrationBuilder migrationBuilder) diff --git a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs index 97f003b82..c92eaf9da 100644 --- a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs +++ b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs @@ -96,9 +96,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("FilterListId", "LanguageId"); - b.HasIndex("LanguageId", "FilterListId") - .IsUnique(); - b.ToTable("filterlists_languages"); }); @@ -114,9 +111,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("FilterListId", "MaintainerId"); - b.HasIndex("MaintainerId", "FilterListId") - .IsUnique(); - b.ToTable("filterlists_maintainers"); }); @@ -132,9 +126,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("ForkFilterListId", "UpstreamFilterListId"); - b.HasIndex("UpstreamFilterListId", "ForkFilterListId") - .IsUnique(); - b.ToTable("forks"); }); @@ -150,9 +141,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("MergeFilterListId", "UpstreamFilterListId"); - b.HasIndex("UpstreamFilterListId", "MergeFilterListId") - .IsUnique(); - b.ToTable("merges"); }); @@ -168,9 +156,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("SnapshotId", "RuleId"); - b.HasIndex("RuleId", "SnapshotId") - .IsUnique(); - b.ToTable("snapshots_rules"); }); @@ -186,9 +171,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("SoftwareId", "SyntaxId"); - b.HasIndex("SyntaxId", "SoftwareId") - .IsUnique(); - b.ToTable("software_syntaxes"); }); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs index d79e07a53..75d3c65ce 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTypeB base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("filterlists_languages"); entityTypeBuilder.HasKey(x => new {x.FilterListId, x.LanguageId}); - entityTypeBuilder.HasIndex(x => new {x.LanguageId, x.FilterListId }).IsUnique(); entityTypeBuilder.HasOne(x => x.FilterList) .WithMany(x => x.FilterListLanguages) .HasForeignKey(x => x.FilterListId); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs index ea1e09867..eb36c24bc 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTyp base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("filterlists_maintainers"); entityTypeBuilder.HasKey(x => new {x.FilterListId, x.MaintainerId}); - entityTypeBuilder.HasIndex(x => new {x.MaintainerId, x.FilterListId }).IsUnique(); entityTypeBuilder.HasOne(x => x.FilterList) .WithMany(x => x.FilterListMaintainers) .HasForeignKey(x => x.FilterListId); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs index 5c68e648f..c1b6e9abd 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTypeBuilder) base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("forks"); entityTypeBuilder.HasKey(x => new {x.ForkFilterListId, x.UpstreamFilterListId}); - entityTypeBuilder.HasIndex(x => new {x.UpstreamFilterListId, x.ForkFilterListId }).IsUnique(); entityTypeBuilder.HasOne(x => x.ForkFilterList) .WithMany(x => x.ForkFilterLists) .HasForeignKey(x => x.ForkFilterListId); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs index 46a1b2be8..c527526ce 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTypeBuilder) base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("merges"); entityTypeBuilder.HasKey(x => new {x.MergeFilterListId, x.UpstreamFilterListId}); - entityTypeBuilder.HasIndex(x => new {x.UpstreamFilterListId, x.MergeFilterListId }).IsUnique(); entityTypeBuilder.HasOne(x => x.MergeFilterList) .WithMany(x => x.MergeFilterLists) .HasForeignKey(x => x.MergeFilterListId); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SnapshotRuleTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SnapshotRuleTypeConfiguration.cs index 2e96390df..52df04c6a 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SnapshotRuleTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SnapshotRuleTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTypeBuilder base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("snapshots_rules"); entityTypeBuilder.HasKey(x => new {x.SnapshotId, x.RuleId}); - entityTypeBuilder.HasIndex(x => new {x.RuleId, x.SnapshotId }).IsUnique(); entityTypeBuilder.HasOne(x => x.Snapshot) .WithMany(x => x.SnapshotRules) .HasForeignKey(x => x.SnapshotId); diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs index d0a3c0632..8f40f9928 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs @@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder entityTypeBuild base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("software_syntaxes"); entityTypeBuilder.HasKey(x => new {x.SoftwareId, x.SyntaxId}); - entityTypeBuilder.HasIndex(x => new {x.SyntaxId, x.SoftwareId }).IsUnique(); entityTypeBuilder.HasOne(x => x.Software) .WithMany(x => x.SoftwareSyntaxes) .HasForeignKey(x => x.SoftwareId); diff --git a/src/FilterLists.Data/FilterListsDbContext.cs b/src/FilterLists.Data/FilterListsDbContext.cs index 58db3ca61..449a80635 100644 --- a/src/FilterLists.Data/FilterListsDbContext.cs +++ b/src/FilterLists.Data/FilterListsDbContext.cs @@ -1,8 +1,10 @@ -using FilterLists.Data.Entities; +using System.Linq; +using FilterLists.Data.Entities; using FilterLists.Data.Entities.Junctions; using FilterLists.Data.EntityTypeConfigurations; using FilterLists.Data.EntityTypeConfigurations.Junctions; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; namespace FilterLists.Data { @@ -17,6 +19,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) base.OnModelCreating(modelBuilder); ApplyConfigurationsEntities(modelBuilder); ApplyConfigurationsJunctions(modelBuilder); + SelectivelyOmitConventions(modelBuilder); + } + + //TODO: update when official API supported + //https://github.com/aspnet/EntityFrameworkCore/issues/10855#issuecomment-363219253 + //https://github.com/aspnet/EntityFrameworkCore/issues/7605 + private static void SelectivelyOmitConventions(ModelBuilder modelBuilder) + { + ((Model)modelBuilder.Model).ConventionDispatcher.StartBatch(); + foreach (var entityType in modelBuilder.Model.GetEntityTypes()) + foreach (var index in entityType.GetIndexes().ToList()) + if (index.DeclaringEntityType.Name.Contains("Junctions")) + entityType.RemoveIndex(index.Properties); } #region Entities