Modify database context and navigation
Creating a migration as-is creates an extraneous column. Need to figure out what the problem is.
This commit is contained in:
parent
b76d45a271
commit
de7e83ee50
7 changed files with 24 additions and 17 deletions
|
@ -54,6 +54,10 @@ public class BotDatabaseContext : DbContext {
|
|||
modelBuilder.Entity<CachedGuildUser>(e => {
|
||||
e.HasKey(p => new { p.GuildId, p.UserId });
|
||||
e.Property(p => p.FirstSeenTime).HasDefaultValueSql("now()");
|
||||
e.HasOne(entry => entry.User)
|
||||
.WithMany(u => u.Guilds)
|
||||
.HasForeignKey(entry => entry.UserId);
|
||||
e.Navigation(entry => entry.User).AutoInclude();
|
||||
});
|
||||
modelBuilder.Entity<CachedGuildMessage>(e => e.Property(p => p.CreatedAt).HasDefaultValueSql("now()"));
|
||||
modelBuilder.HasPostgresEnum<ModLogType>();
|
||||
|
@ -62,6 +66,14 @@ public class BotDatabaseContext : DbContext {
|
|||
e.HasOne(entry => entry.User)
|
||||
.WithMany(gu => gu.Logs)
|
||||
.HasForeignKey(entry => new { entry.GuildId, entry.UserId });
|
||||
e.Navigation(entry => entry.User).AutoInclude();
|
||||
});
|
||||
modelBuilder.Entity<CachedGuildMessage>(e => {
|
||||
e.HasOne(entry => entry.Author)
|
||||
.WithMany(gu => gu.Messages)
|
||||
.HasForeignKey(cgm => new { cgm.GuildId, cgm.AuthorId })
|
||||
.HasPrincipalKey(cgu => new { cgu.GuildId, cgu.UserId });
|
||||
e.Navigation(entry => entry.Author).AutoInclude();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,11 +53,8 @@ public class CachedGuildMessage {
|
|||
/// </summary>
|
||||
public string? Content { get; set; } = null!;
|
||||
|
||||
/// <inheritdoc cref="CachedGuildUser.User" />
|
||||
[ForeignKey(nameof(AuthorId))]
|
||||
[InverseProperty(nameof(CachedUser.GuildMessages))]
|
||||
public CachedUser Author { get; set; } = null!;
|
||||
// TODO set up composite foreign key. will require rewriting some parts in modules...
|
||||
/// <inheritdoc cref="ModLogEntry.User"/>
|
||||
public CachedGuildUser Author { get; set; } = null!;
|
||||
|
||||
// Used by MessageCachingSubservice
|
||||
internal static CachedGuildMessage? Clone(CachedGuildMessage? original) {
|
||||
|
|
|
@ -28,14 +28,17 @@ public class CachedGuildUser {
|
|||
public string? Nickname { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If included in the query, references the associated <seealso cref="CachedUser"/> for this entry.
|
||||
/// Gets the associated <seealso cref="CachedUser"/> for this entry. This entity is auto-included.
|
||||
/// </summary>
|
||||
[ForeignKey(nameof(UserId))]
|
||||
[InverseProperty(nameof(CachedUser.Guilds))]
|
||||
public CachedUser User { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// If included in the query, references all <seealso cref="ModLogEntry"/> items associated with this entry.
|
||||
/// </summary>
|
||||
public ICollection<ModLogEntry> Logs { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// If included in the query, references all <seealso cref="CachedGuildMessage"/> items associated with this entry.
|
||||
/// </summary>
|
||||
public ICollection<CachedGuildMessage> Messages { get; set; } = null!;
|
||||
}
|
||||
|
|
|
@ -37,12 +37,10 @@ public class CachedUser {
|
|||
/// <summary>
|
||||
/// If included in the query, gets the list of associated <seealso cref="CachedGuildUser"/> entries for this entry.
|
||||
/// </summary>
|
||||
[InverseProperty(nameof(CachedGuildUser.User))]
|
||||
public ICollection<CachedGuildUser> Guilds { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// If included in the query, gets the list of associated <seealso cref="CachedGuildMessage"/> entries for this entry.
|
||||
/// </summary>
|
||||
[InverseProperty(nameof(CachedGuildMessage.Author))]
|
||||
public ICollection<CachedGuildMessage> GuildMessages { get; set; } = null!;
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ public class ModLogEntry : ISharedEvent {
|
|||
public string? Message { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If included in the query, gets the associated <seealso cref="CachedGuildUser"/> for this entry.
|
||||
/// Gets the associated <seealso cref="CachedGuildUser"/> for this entry. This entity is auto-included.
|
||||
/// </summary>
|
||||
public CachedGuildUser User { get; set; } = null!;
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using Discord;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RegexBot.Data;
|
||||
using System.Text;
|
||||
|
||||
|
@ -24,7 +23,6 @@ internal partial class ModLogs {
|
|||
|
||||
using var db = new BotDatabaseContext();
|
||||
var cachedMsg = db.GuildMessageCache
|
||||
.Include(gm => gm.Author)
|
||||
.Where(gm => gm.MessageId == argMsg.Id)
|
||||
.SingleOrDefault();
|
||||
|
||||
|
@ -50,8 +48,8 @@ internal partial class ModLogs {
|
|||
};
|
||||
} else {
|
||||
reportEmbed.Author = new EmbedAuthorBuilder() {
|
||||
Name = $"{cachedMsg.Author.Username}#{cachedMsg.Author.Discriminator}",
|
||||
IconUrl = cachedMsg.Author.AvatarUrl ?? GetDefaultAvatarUrl(cachedMsg.Author.Discriminator)
|
||||
Name = $"{cachedMsg.Author.User.Username}#{cachedMsg.Author.User.Discriminator}",
|
||||
IconUrl = cachedMsg.Author.User.AvatarUrl ?? GetDefaultAvatarUrl(cachedMsg.Author.User.Discriminator)
|
||||
};
|
||||
}
|
||||
SetAttachmentsField(reportEmbed, cachedMsg.AttachmentNames);
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#pragma warning disable CA1822 // "Mark members as static" - members should only be callable by code with access to this instance
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RegexBot.Common;
|
||||
using RegexBot.Data;
|
||||
|
||||
|
@ -112,7 +111,7 @@ class UserCachingSubservice {
|
|||
internal CachedGuildUser? DoGuildUserQuery(ulong guildId, string search) {
|
||||
static CachedGuildUser? innerQuery(ulong guildId, ulong? sID, (string name, string? disc)? nameSearch) {
|
||||
var db = new BotDatabaseContext();
|
||||
var query = db.GuildUserCache.Include(gu => gu.User).Where(c => c.GuildId == guildId);
|
||||
var query = db.GuildUserCache.Where(c => c.GuildId == guildId);
|
||||
if (sID.HasValue)
|
||||
query = query.Where(c => c.UserId == sID.Value);
|
||||
if (nameSearch != null) {
|
||||
|
|
Loading…
Reference in a new issue