Fix incorrect foreign key reference

Replaces previously committed migration with a new one.
If updating the database, run these first before the migration:
```
drop table modlogs;
drop type mod_log_type;
delete from "__EFMigrationsHistory" where "migration_id" = '20220824023321_AddModLogs';
```
This commit is contained in:
Noi 2022-08-26 21:42:25 -07:00
parent dfec87672f
commit 5f00e8b4b2
5 changed files with 53 additions and 17 deletions

View file

@ -12,6 +12,9 @@ public class BotDatabaseContext : DbContext {
// Get our own config loaded just for the SQL stuff // Get our own config loaded just for the SQL stuff
var conf = new InstanceConfig(); var conf = new InstanceConfig();
_connectionString = new NpgsqlConnectionStringBuilder() { _connectionString = new NpgsqlConnectionStringBuilder() {
#if DEBUG
IncludeErrorDetail = true,
#endif
Host = conf.SqlHost ?? "localhost", // default to localhost Host = conf.SqlHost ?? "localhost", // default to localhost
Database = conf.SqlDatabase, Database = conf.SqlDatabase,
Username = conf.SqlUsername, Username = conf.SqlUsername,
@ -49,7 +52,7 @@ public class BotDatabaseContext : DbContext {
protected override void OnModelCreating(ModelBuilder modelBuilder) { protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<CachedUser>(entity => entity.Property(e => e.Discriminator).HasMaxLength(4).IsFixedLength()); modelBuilder.Entity<CachedUser>(entity => entity.Property(e => e.Discriminator).HasMaxLength(4).IsFixedLength());
modelBuilder.Entity<CachedGuildUser>(e => { modelBuilder.Entity<CachedGuildUser>(e => {
e.HasKey(p => new { p.UserId, p.GuildId }); e.HasKey(p => new { p.GuildId, p.UserId });
e.Property(p => p.FirstSeenTime).HasDefaultValueSql("now()"); e.Property(p => p.FirstSeenTime).HasDefaultValueSql("now()");
}); });
modelBuilder.Entity<CachedGuildMessage>(e => e.Property(p => p.CreatedAt).HasDefaultValueSql("now()")); modelBuilder.Entity<CachedGuildMessage>(e => e.Property(p => p.CreatedAt).HasDefaultValueSql("now()"));
@ -58,7 +61,7 @@ public class BotDatabaseContext : DbContext {
e.Property(p => p.Timestamp).HasDefaultValueSql("now()"); e.Property(p => p.Timestamp).HasDefaultValueSql("now()");
e.HasOne(entry => entry.User) e.HasOne(entry => entry.User)
.WithMany(gu => gu.Logs) .WithMany(gu => gu.Logs)
.HasForeignKey(entry => new {entry.GuildId, entry.UserId}); .HasForeignKey(entry => new { entry.GuildId, entry.UserId });
}); });
} }
} }

View file

@ -6,14 +6,14 @@ namespace RegexBot.Data;
/// </summary> /// </summary>
[Table("cache_usersinguild")] [Table("cache_usersinguild")]
public class CachedGuildUser { public class CachedGuildUser {
/// <inheritdoc cref="CachedUser.UserId"/>
public long UserId { get; set; }
/// <summary> /// <summary>
/// Gets the associated guild's snowflake ID. /// Gets the associated guild's snowflake ID.
/// </summary> /// </summary>
public long GuildId { get; set; } public long GuildId { get; set; }
/// <inheritdoc cref="CachedUser.UserId"/>
public long UserId { get; set; }
/// <inheritdoc cref="CachedUser.ULastUpdateTime"/> /// <inheritdoc cref="CachedUser.ULastUpdateTime"/>
public DateTimeOffset GULastUpdateTime { get; set; } public DateTimeOffset GULastUpdateTime { get; set; }

View file

@ -13,7 +13,7 @@ using RegexBot.Data;
namespace RegexBot.Data.Migrations namespace RegexBot.Data.Migrations
{ {
[DbContext(typeof(BotDatabaseContext))] [DbContext(typeof(BotDatabaseContext))]
[Migration("20220824023321_AddModLogs")] [Migration("20220827041853_AddModLogs")]
partial class AddModLogs partial class AddModLogs
{ {
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -74,14 +74,14 @@ namespace RegexBot.Data.Migrations
modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b => modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b =>
{ {
b.Property<long>("UserId")
.HasColumnType("bigint")
.HasColumnName("user_id");
b.Property<long>("GuildId") b.Property<long>("GuildId")
.HasColumnType("bigint") .HasColumnType("bigint")
.HasColumnName("guild_id"); .HasColumnName("guild_id");
b.Property<long>("UserId")
.HasColumnType("bigint")
.HasColumnName("user_id");
b.Property<DateTimeOffset>("FirstSeenTime") b.Property<DateTimeOffset>("FirstSeenTime")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone") .HasColumnType("timestamp with time zone")
@ -96,9 +96,12 @@ namespace RegexBot.Data.Migrations
.HasColumnType("text") .HasColumnType("text")
.HasColumnName("nickname"); .HasColumnName("nickname");
b.HasKey("UserId", "GuildId") b.HasKey("GuildId", "UserId")
.HasName("pk_cache_usersinguild"); .HasName("pk_cache_usersinguild");
b.HasIndex("UserId")
.HasDatabaseName("ix_cache_usersinguild_user_id");
b.ToTable("cache_usersinguild", (string)null); b.ToTable("cache_usersinguild", (string)null);
}); });

View file

@ -10,9 +10,18 @@ namespace RegexBot.Data.Migrations
{ {
protected override void Up(MigrationBuilder migrationBuilder) protected override void Up(MigrationBuilder migrationBuilder)
{ {
migrationBuilder.DropPrimaryKey(
name: "pk_cache_usersinguild",
table: "cache_usersinguild");
migrationBuilder.AlterDatabase() migrationBuilder.AlterDatabase()
.Annotation("Npgsql:Enum:mod_log_type", "other,note,warn,timeout,kick,ban"); .Annotation("Npgsql:Enum:mod_log_type", "other,note,warn,timeout,kick,ban");
migrationBuilder.AddPrimaryKey(
name: "pk_cache_usersinguild",
table: "cache_usersinguild",
columns: new[] { "guild_id", "user_id" });
migrationBuilder.CreateTable( migrationBuilder.CreateTable(
name: "modlogs", name: "modlogs",
columns: table => new columns: table => new
@ -33,10 +42,15 @@ namespace RegexBot.Data.Migrations
name: "fk_modlogs_cache_usersinguild_user_temp_id", name: "fk_modlogs_cache_usersinguild_user_temp_id",
columns: x => new { x.guild_id, x.user_id }, columns: x => new { x.guild_id, x.user_id },
principalTable: "cache_usersinguild", principalTable: "cache_usersinguild",
principalColumns: new[] { "user_id", "guild_id" }, principalColumns: new[] { "guild_id", "user_id" },
onDelete: ReferentialAction.Cascade); onDelete: ReferentialAction.Cascade);
}); });
migrationBuilder.CreateIndex(
name: "ix_cache_usersinguild_user_id",
table: "cache_usersinguild",
column: "user_id");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "ix_modlogs_guild_id_user_id", name: "ix_modlogs_guild_id_user_id",
table: "modlogs", table: "modlogs",
@ -48,8 +62,21 @@ namespace RegexBot.Data.Migrations
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "modlogs"); name: "modlogs");
migrationBuilder.DropPrimaryKey(
name: "pk_cache_usersinguild",
table: "cache_usersinguild");
migrationBuilder.DropIndex(
name: "ix_cache_usersinguild_user_id",
table: "cache_usersinguild");
migrationBuilder.AlterDatabase() migrationBuilder.AlterDatabase()
.OldAnnotation("Npgsql:Enum:mod_log_type", "other,note,warn,timeout,kick,ban"); .OldAnnotation("Npgsql:Enum:mod_log_type", "other,note,warn,timeout,kick,ban");
migrationBuilder.AddPrimaryKey(
name: "pk_cache_usersinguild",
table: "cache_usersinguild",
columns: new[] { "user_id", "guild_id" });
} }
} }
} }

View file

@ -72,14 +72,14 @@ namespace RegexBot.Data.Migrations
modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b => modelBuilder.Entity("RegexBot.Data.CachedGuildUser", b =>
{ {
b.Property<long>("UserId")
.HasColumnType("bigint")
.HasColumnName("user_id");
b.Property<long>("GuildId") b.Property<long>("GuildId")
.HasColumnType("bigint") .HasColumnType("bigint")
.HasColumnName("guild_id"); .HasColumnName("guild_id");
b.Property<long>("UserId")
.HasColumnType("bigint")
.HasColumnName("user_id");
b.Property<DateTimeOffset>("FirstSeenTime") b.Property<DateTimeOffset>("FirstSeenTime")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone") .HasColumnType("timestamp with time zone")
@ -94,9 +94,12 @@ namespace RegexBot.Data.Migrations
.HasColumnType("text") .HasColumnType("text")
.HasColumnName("nickname"); .HasColumnName("nickname");
b.HasKey("UserId", "GuildId") b.HasKey("GuildId", "UserId")
.HasName("pk_cache_usersinguild"); .HasName("pk_cache_usersinguild");
b.HasIndex("UserId")
.HasDatabaseName("ix_cache_usersinguild_user_id");
b.ToTable("cache_usersinguild", (string)null); b.ToTable("cache_usersinguild", (string)null);
}); });