// // Licensed under the MIT License. See LICENSE file in the project root for full license information. // namespace MUnique.OpenMU.Persistence.EntityFramework.Extensions.ModelBuilder; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using MUnique.OpenMU.Persistence.EntityFramework.Model; /// /// Extensions for Castle Siege-related s. /// internal static class CastleSiegeExtensions { /// /// Applies the settings for the entity. /// /// The builder. public static void Apply(this EntityTypeBuilder builder) { builder.Property(configuration => configuration.CrownHoldTimeSeconds).HasDefaultValue(30); builder.Property(configuration => configuration.RegisterMinLevel).HasDefaultValue(200); builder.Property(configuration => configuration.RegisterMinMembers).HasDefaultValue(20); builder.Property(configuration => configuration.MaxAttackingGuilds).HasDefaultValue(3); builder.HasOne(configuration => configuration.RawCastleSiegeMapDefinition) .WithMany() .OnDelete(DeleteBehavior.Restrict); builder.HasOne(configuration => configuration.RawLandOfTrialsMapDefinition) .WithMany() .OnDelete(DeleteBehavior.Restrict); builder.HasOne(configuration => configuration.RawRewardItemDefinition) .WithMany() .OnDelete(DeleteBehavior.Restrict); } /// /// Applies the settings for the entity. /// /// The builder. public static void Apply(this EntityTypeBuilder builder) { builder.HasOne(definition => definition.RawMonsterDefinition) .WithMany() .IsRequired() .OnDelete(DeleteBehavior.Restrict); builder.HasIndex(definition => new { definition.MonsterDefinitionId, definition.InstanceId }); } /// /// Applies the settings for the entity. /// /// The builder. public static void Apply(this EntityTypeBuilder builder) { builder.HasOne() .WithMany() .HasForeignKey(data => data.OwnerGuildId) .OnDelete(DeleteBehavior.SetNull); } /// /// Applies the settings for the entity. /// /// The builder. public static void Apply(this EntityTypeBuilder builder) { builder.HasIndex(state => new { state.MonsterNumber, state.InstanceId }).IsUnique(); } /// /// Applies the settings for the entity. /// /// The builder. public static void Apply(this EntityTypeBuilder builder) { builder.Property(registration => registration.GuildName).HasMaxLength(8).IsRequired(); builder.HasIndex(registration => registration.GuildId).IsUnique(); builder.HasOne() .WithMany() .HasForeignKey(registration => registration.GuildId) .OnDelete(DeleteBehavior.Cascade); } }