Документирование и небольшой рефакторинг модели.

This commit is contained in:
2025-05-11 00:31:15 +04:00
parent 1a977ee988
commit 3c65274b45
64 changed files with 1960 additions and 554 deletions
+48 -11
View File
@@ -23,28 +23,45 @@ using Pf2eModel.Model.Structure.SpellRelation;
namespace Pf2eModel;
[SuppressMessage("ReSharper", "UnusedParameter.Local")]
/// <inheritdoc/>
[SuppressMessage("ReSharper", "InconsistentNaming")]
public partial class Pf2eDbContext
{
/// <summary>
/// Длина названия сущности.
/// </summary>
public const int NameLength = 255;
/// <inheritdoc/>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseIdentityByDefaultColumns();
DefineEnums(modelBuilder);
// DefineEnums(modelBuilder);
DefineBase(modelBuilder);
DefineCommon(modelBuilder);
DefineStructure(modelBuilder);
DefineMethods(modelBuilder);
}
/// <summary>
/// Устанавливает связь между сущностью и её корневой сущностью.
/// </summary>
/// <typeparam name="T">Тип сущности.</typeparam>
/// <param name="entity">Генератор настроек таблицы сущности.</param>
private void BindEntity<T>(EntityTypeBuilder<T> entity)
where T : class, IEntity
{
entity.HasOne(e => e.Entity).WithOne().HasForeignKey<T>(e => e.Id).IsRequired();
}
/// <summary>
/// Устанавливает связь между сущностью и локализованной строкой.
/// </summary>
/// <typeparam name="T">Тип сущности.</typeparam>
/// <param name="entity">Генератор настроек таблицы сущности.</param>
/// <param name="func">Функция, выбирающая поле сущности.</param>
/// <param name="required">Флаг, указывающий, что локализованная строка не может быть `null`.</param>
private void BindLocaleString<T>(
EntityTypeBuilder<T> entity,
Expression<Func<T, LocaleString?>> func,
@@ -59,33 +76,41 @@ public partial class Pf2eDbContext
.IsRequired(required);
}
/// <summary>
/// Определяет перечисления, используемые в модели.
/// </summary>
/// <param name="modelBuilder">Построитель модели.</param>
private void DefineEnums(ModelBuilder modelBuilder)
{
modelBuilder
.HasPostgresEnum<ActionEnum>()
.HasPostgresEnum<EntityType>()
.HasPostgresEnum<EntityRarity>()
.HasPostgresEnum<LocaleType>()
.HasPostgresEnum<TraitType>()
.HasPostgresEnum<ActionCategory>()
.HasPostgresEnum<Size>()
.HasPostgresEnum<AncestryVision>()
.HasPostgresEnum<ActionEnum>()
.HasPostgresEnum<AttributeValues>()
.HasPostgresEnum<ClassProgressionType>()
.HasPostgresEnum<ConditionGroup>()
.HasPostgresEnum<DeityCategory>()
.HasPostgresEnum<DeityFonts>()
.HasPostgresEnum<DeitySanctification>()
.HasPostgresEnum<FeatActionType>()
.HasPostgresEnum<ElementEnum>()
.HasPostgresEnum<EntityRarity>()
.HasPostgresEnum<EntityType>()
.HasPostgresEnum<FeatCategory>()
.HasPostgresEnum<SizeEnum>()
.HasPostgresEnum<SourceCategory>()
.HasPostgresEnum<SpellAreaType>()
.HasPostgresEnum<SpellDamageCategory>()
.HasPostgresEnum<SpellDamageKinds>()
.HasPostgresEnum<SpellTradition>()
.HasPostgresEnum<AttributeValues>()
.HasPostgresEnum<TrainingRank>()
.HasPostgresEnum<SourceCategory>();
.HasPostgresEnum<TraitType>()
.HasPostgresEnum<VisionEnum>();
}
/// <summary>
/// Определяет базовые сущности и их связи.
/// </summary>
/// <param name="modelBuilder">Построитель модели.</param>
private void DefineBase(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>(entity =>
@@ -151,6 +176,10 @@ public partial class Pf2eDbContext
modelBuilder.Entity<KeywordAlias>(entity => { });
}
/// <summary>
/// Определяет общие сущности и их связи.
/// </summary>
/// <param name="modelBuilder">Построитель модели.</param>
private void DefineCommon(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Frequency>(entity => { });
@@ -163,6 +192,10 @@ public partial class Pf2eDbContext
});
}
/// <summary>
/// Определяет структуру сущностей и их связи.
/// </summary>
/// <param name="modelBuilder">Построитель модели.</param>
private void DefineStructure(ModelBuilder modelBuilder)
{
// Action
@@ -517,6 +550,10 @@ public partial class Pf2eDbContext
});
}
/// <summary>
/// Определяет методы, которые будут использоваться в запросах LINQ.
/// </summary>
/// <param name="modelBuilder">Построитель модели.</param>
private void DefineMethods(ModelBuilder modelBuilder)
{
MethodInfo localeSearch = typeof(Pf2eDbContext).GetMethod(