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