mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
feat(directory): ✨ configure many-to-many relationships
This commit is contained in:
parent
3f83b6edf2
commit
95ab429048
7 changed files with 135 additions and 2 deletions
|
|
@ -26,7 +26,8 @@ public override int SaveChanges(bool acceptAllChangesOnSuccess)
|
|||
throw new InvalidOperationException("This context is read-only.");
|
||||
}
|
||||
|
||||
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken())
|
||||
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new InvalidOperationException("This context is read-only.");
|
||||
}
|
||||
|
|
@ -35,13 +36,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|||
{
|
||||
_ = modelBuilder ?? throw new ArgumentNullException(nameof(modelBuilder));
|
||||
|
||||
//TODO: figure out why this extension doesn't load configs
|
||||
modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly);
|
||||
|
||||
// TODO: rm explicit below once ApplyConfigurationsFromAssembly() works properly
|
||||
modelBuilder.ApplyConfiguration(new DependentTypeConfiguration<Dependent>());
|
||||
modelBuilder.ApplyConfiguration(new FilterListLanguageTypeConfiguration<FilterListLanguage>());
|
||||
modelBuilder.ApplyConfiguration(new FilterListMaintainerTypeConfiguration<FilterListMaintainer>());
|
||||
modelBuilder.ApplyConfiguration(new FilterListSyntaxTypeConfiguration<FilterListSyntax>());
|
||||
modelBuilder.ApplyConfiguration(new FilterListTagTypeConfiguration<FilterListTag>());
|
||||
modelBuilder.ApplyConfiguration(new ForkTypeConfiguration<Fork>());
|
||||
modelBuilder.ApplyConfiguration(new LanguageTypeConfiguration<Language>());
|
||||
modelBuilder.ApplyConfiguration(new MergeTypeConfiguration<Merge>());
|
||||
modelBuilder.ApplyConfiguration(new SoftwareSyntaxTypeConfiguration<SoftwareSyntax>());
|
||||
modelBuilder.ApplyConfiguration(new ViewUrlPartialTypeConfiguration<ViewUrlPartial>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class FilterListMaintainerTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : FilterListMaintainer
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
const string filterListId = nameof(FilterListMaintainer.FilterList) + "Id";
|
||||
const string maintainerId = nameof(FilterListMaintainer.Maintainer) + "Id";
|
||||
builder.Property<ushort>(filterListId);
|
||||
builder.Property<ushort>(maintainerId);
|
||||
builder.HasKey(filterListId, maintainerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class FilterListSyntaxTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : FilterListSyntax
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
const string filterListId = nameof(FilterListSyntax.FilterList) + "Id";
|
||||
const string syntaxId = nameof(FilterListSyntax.Syntax) + "Id";
|
||||
builder.Property<ushort>(filterListId);
|
||||
builder.Property<ushort>(syntaxId);
|
||||
builder.HasKey(filterListId, syntaxId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class FilterListTagTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : FilterListTag
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
const string filterListId = nameof(FilterListTag.FilterList) + "Id";
|
||||
const string tagId = nameof(FilterListTag.Tag) + "Id";
|
||||
builder.Property<ushort>(filterListId);
|
||||
builder.Property<ushort>(tagId);
|
||||
builder.HasKey(filterListId, tagId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class LanguageTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : Language
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
builder.HasKey(l => l.Iso6391);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class SoftwareSyntaxTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : SoftwareSyntax
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
const string softwareId = nameof(SoftwareSyntax.Software) + "Id";
|
||||
const string syntaxId = nameof(SoftwareSyntax.Syntax) + "Id";
|
||||
builder.Property<ushort>(softwareId);
|
||||
builder.Property<ushort>(syntaxId);
|
||||
builder.HasKey(softwareId, syntaxId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings
|
||||
{
|
||||
internal class ViewUrlPartialTypeConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
|
||||
where TEntity : ViewUrlPartial
|
||||
{
|
||||
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
|
||||
{
|
||||
_ = builder ?? throw new ArgumentNullException(nameof(builder));
|
||||
|
||||
const string filterListId = nameof(ViewUrlPartial.FilterList) + "Id";
|
||||
builder.Property<ushort>(filterListId);
|
||||
builder.HasKey(filterListId, nameof(ViewUrlPartial.Position));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue