Сущность домена

This commit is contained in:
2025-09-13 12:06:56 +04:00
parent 776abeb58a
commit 8290183220
5 changed files with 148 additions and 2 deletions
+6
View File
@@ -79,6 +79,12 @@ public enum EntityType
[PgName("condition")] [PgName("condition")]
Condition, Condition,
/// <summary>
/// Домен божества.
/// </summary>
[PgName("domain")]
Domain,
/// <summary> /// <summary>
/// Божество. /// Божество.
/// </summary> /// </summary>
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Structure;
namespace Pf2eModel.Model.Structure.DeityRelation; namespace Pf2eModel.Model.Structure.DeityRelation;
@@ -25,6 +26,13 @@ public class DeityDomain
[Comment("Идентификатор божества")] [Comment("Идентификатор божества")]
public int DeityId { get; set; } public int DeityId { get; set; }
/// <summary>
/// Идентификатор домена.
/// </summary>
[Column(Order = 4)]
[Comment("Идентификатор домена")]
public int DomainId { get; set; }
/// <summary> /// <summary>
/// Флаг, указывающий, является ли домен основным для божества. /// Флаг, указывающий, является ли домен основным для божества.
/// </summary> /// </summary>
@@ -35,7 +43,7 @@ public class DeityDomain
/// <summary> /// <summary>
/// Значение домена божества, например, "Свет", "Тьма" и т.д. /// Значение домена божества, например, "Свет", "Тьма" и т.д.
/// </summary> /// </summary>
[Column(Order = 4)] [Column(Order = 5)]
[MaxLength(Pf2eDbContext.NameLength)] [MaxLength(Pf2eDbContext.NameLength)]
public string Value { get; set; } = null!; public string Value { get; set; } = null!;
@@ -43,4 +51,9 @@ public class DeityDomain
/// Божество, к которому относится домен. /// Божество, к которому относится домен.
/// </summary> /// </summary>
public virtual Deity Deity { get; set; } = null!; public virtual Deity Deity { get; set; } = null!;
/// <summary>
/// Домен, связанный с божеством.
/// </summary>
public virtual Domain Domain { get; set; } = null!;
} }
+86
View File
@@ -0,0 +1,86 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Pf2eModel.Model.Base;
using Pf2eModel.Model.Enum;
using Pf2eModel.Model.Structure.DeityRelation;
namespace Pf2eModel.Model.Structure;
/// <summary>
/// Домен.
/// </summary>
[EntityOfType(EntityType.Domain)]
public class Domain : IEntity
{
/// <inheritdoc/>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column(Order = 1)]
[Comment("Идентификатор")]
public int Id { get; set; }
/// <inheritdoc/>
public Entity Entity { get; set; } = null!;
/// <summary>
/// Название домена.
/// </summary>
[Column(Order = 2)]
[MaxLength(Pf2eDbContext.NameLength)]
[Comment("Название домена")]
public string Name { get; set; } = null!;
/// <summary>
/// Идентификатор заклинания домена.
/// </summary>
[Column(Order = 3)]
[Comment("Идентификатор заклинания домена")]
public int DomainSpellId { get; set; }
/// <summary>
/// Идентификатор продвинутого заклинания домена.
/// </summary>
[Column(Order = 4)]
[Comment("Идентификатор продвинутого заклинания домена")]
public int AdvancedDomainSpellId { get; set; }
/// <summary>
/// Идентификатор апокрифического заклинания домена.
/// </summary>
[Column(Order = 5)]
[Comment("Идентификатор апокрифического заклинания домена")]
public int? ApocryphalSpellId { get; set; }
/// <summary>
/// Идентификатор продвинутого апокрифического заклинания домена.
/// </summary>
[Column(Order = 6)]
[Comment("Идентификатор продвинутого апокрифического заклинания домена")]
public int? AdvancedApocryphalSpellId { get; set; }
/// <summary>
/// Заклинание домена.
/// </summary>
public virtual Spell DomainSpell { get; set; } = null!;
/// <summary>
/// Продвинутое заклинание домена.
/// </summary>
public virtual Spell AdvancedDomainSpell { get; set; } = null!;
/// <summary>
/// Апокрифическое заклинание домена.
/// </summary>
public virtual Spell? ApocryphalSpell { get; set; }
/// <summary>
/// Продвинутое апокрифическое заклинание домена.
/// </summary>
public virtual Spell? AdvancedApocryphalSpell { get; set; }
/// <summary>
/// Связи с божествами, которые используют этот домен.
/// </summary>
public virtual ICollection<DeityDomain> DeityDomains { get; set; } = new List<DeityDomain>();
}
+2
View File
@@ -89,6 +89,8 @@ public partial class Pf2eDbContext : DbContext
public virtual DbSet<DeityWeapon> DeityWeapons { get; set; } public virtual DbSet<DeityWeapon> DeityWeapons { get; set; }
public virtual DbSet<Domain> Domains { get; set; }
public virtual DbSet<Entity> Entities { get; set; } public virtual DbSet<Entity> Entities { get; set; }
public virtual DbSet<EntityAlias> EntityAliases { get; set; } public virtual DbSet<EntityAlias> EntityAliases { get; set; }
+40 -1
View File
@@ -393,6 +393,42 @@ public partial class Pf2eDbContext
BindEntity(entity); BindEntity(entity);
}); });
// Domain
modelBuilder.Entity<Domain>(entity =>
{
BindEntity(entity);
entity
.HasOne(d => d.DomainSpell)
.WithMany()
.HasForeignKey(d => d.DomainSpellId)
.OnDelete(DeleteBehavior.Cascade);
entity
.HasOne(d => d.AdvancedDomainSpell)
.WithMany()
.HasForeignKey(d => d.AdvancedDomainSpellId)
.OnDelete(DeleteBehavior.Cascade);
entity
.HasOne(d => d.ApocryphalSpell)
.WithMany()
.HasForeignKey(d => d.ApocryphalSpellId)
.OnDelete(DeleteBehavior.SetNull);
entity
.HasOne(d => d.AdvancedApocryphalSpell)
.WithMany()
.HasForeignKey(d => d.AdvancedApocryphalSpellId)
.OnDelete(DeleteBehavior.SetNull);
entity
.HasMany(d => d.DeityDomains)
.WithOne(dd => dd.Domain)
.HasForeignKey(dd => dd.DomainId)
.OnDelete(DeleteBehavior.Cascade);
});
// Deity // Deity
modelBuilder.Entity<Deity>(entity => modelBuilder.Entity<Deity>(entity =>
{ {
@@ -425,7 +461,10 @@ public partial class Pf2eDbContext
entity.HasMany(e => e.Skills).WithMany(); entity.HasMany(e => e.Skills).WithMany();
}); });
modelBuilder.Entity<DeityAttribute>(entity => { }); modelBuilder.Entity<DeityAttribute>(entity => { });
modelBuilder.Entity<DeityDomain>(entity => { }); modelBuilder.Entity<DeityDomain>(entity =>
{
// Связь теперь настроена в конфигурации Domain
});
modelBuilder.Entity<DeitySpell>(entity => modelBuilder.Entity<DeitySpell>(entity =>
{ {
entity entity