mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
exclude convention indexes on many-to-many entities
ref https://github.com/aspnet/EntityFrameworkCore/issues/7605#issuecomment-363949146 and https://github.com/aspnet/EntityFrameworkCore/issues/10855#issuecomment-363219253
This commit is contained in:
parent
9c40851378
commit
f0e927811d
11 changed files with 18 additions and 80 deletions
|
|
@ -18,6 +18,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Migrations\" />
|
||||
<Folder Include="wwwroot\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
});
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
@ -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");
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<FilterListLanguage> 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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<FilterListMaintainer> 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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<Fork> 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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<Merge> 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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<SnapshotRule> 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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ public override void Configure(EntityTypeBuilder<SoftwareSyntax> 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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue