From 8290183220ce6b426115f18a079a88886820edab Mon Sep 17 00:00:00 2001 From: Ilya Kozhemyakin Date: Sat, 13 Sep 2025 12:06:56 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BE=D0=BC=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pf2eModel/Model/Enum/EntityType.cs | 6 ++ .../Structure/DeityRelation/DeityDomain.cs | 15 +++- Pf2eModel/Model/Structure/Domain.cs | 86 +++++++++++++++++++ Pf2eModel/Pf2eDbContext.cs | 2 + Pf2eModel/Pf2eDbContextModel.cs | 41 ++++++++- 5 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 Pf2eModel/Model/Structure/Domain.cs diff --git a/Pf2eModel/Model/Enum/EntityType.cs b/Pf2eModel/Model/Enum/EntityType.cs index b3aa3d5..bb72622 100644 --- a/Pf2eModel/Model/Enum/EntityType.cs +++ b/Pf2eModel/Model/Enum/EntityType.cs @@ -79,6 +79,12 @@ public enum EntityType [PgName("condition")] Condition, + /// + /// Домен божества. + /// + [PgName("domain")] + Domain, + /// /// Божество. /// diff --git a/Pf2eModel/Model/Structure/DeityRelation/DeityDomain.cs b/Pf2eModel/Model/Structure/DeityRelation/DeityDomain.cs index 6d693d1..c6d29a6 100644 --- a/Pf2eModel/Model/Structure/DeityRelation/DeityDomain.cs +++ b/Pf2eModel/Model/Structure/DeityRelation/DeityDomain.cs @@ -1,6 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; +using Pf2eModel.Model.Structure; namespace Pf2eModel.Model.Structure.DeityRelation; @@ -25,6 +26,13 @@ public class DeityDomain [Comment("Идентификатор божества")] public int DeityId { get; set; } + /// + /// Идентификатор домена. + /// + [Column(Order = 4)] + [Comment("Идентификатор домена")] + public int DomainId { get; set; } + /// /// Флаг, указывающий, является ли домен основным для божества. /// @@ -35,7 +43,7 @@ public class DeityDomain /// /// Значение домена божества, например, "Свет", "Тьма" и т.д. /// - [Column(Order = 4)] + [Column(Order = 5)] [MaxLength(Pf2eDbContext.NameLength)] public string Value { get; set; } = null!; @@ -43,4 +51,9 @@ public class DeityDomain /// Божество, к которому относится домен. /// public virtual Deity Deity { get; set; } = null!; + + /// + /// Домен, связанный с божеством. + /// + public virtual Domain Domain { get; set; } = null!; } diff --git a/Pf2eModel/Model/Structure/Domain.cs b/Pf2eModel/Model/Structure/Domain.cs new file mode 100644 index 0000000..b783f57 --- /dev/null +++ b/Pf2eModel/Model/Structure/Domain.cs @@ -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; + +/// +/// Домен. +/// +[EntityOfType(EntityType.Domain)] +public class Domain : IEntity +{ + /// + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.None)] + [Column(Order = 1)] + [Comment("Идентификатор")] + public int Id { get; set; } + + /// + public Entity Entity { get; set; } = null!; + + /// + /// Название домена. + /// + [Column(Order = 2)] + [MaxLength(Pf2eDbContext.NameLength)] + [Comment("Название домена")] + public string Name { get; set; } = null!; + + /// + /// Идентификатор заклинания домена. + /// + [Column(Order = 3)] + [Comment("Идентификатор заклинания домена")] + public int DomainSpellId { get; set; } + + /// + /// Идентификатор продвинутого заклинания домена. + /// + [Column(Order = 4)] + [Comment("Идентификатор продвинутого заклинания домена")] + public int AdvancedDomainSpellId { get; set; } + + /// + /// Идентификатор апокрифического заклинания домена. + /// + [Column(Order = 5)] + [Comment("Идентификатор апокрифического заклинания домена")] + public int? ApocryphalSpellId { get; set; } + + /// + /// Идентификатор продвинутого апокрифического заклинания домена. + /// + [Column(Order = 6)] + [Comment("Идентификатор продвинутого апокрифического заклинания домена")] + public int? AdvancedApocryphalSpellId { get; set; } + + /// + /// Заклинание домена. + /// + public virtual Spell DomainSpell { get; set; } = null!; + + /// + /// Продвинутое заклинание домена. + /// + public virtual Spell AdvancedDomainSpell { get; set; } = null!; + + /// + /// Апокрифическое заклинание домена. + /// + public virtual Spell? ApocryphalSpell { get; set; } + + /// + /// Продвинутое апокрифическое заклинание домена. + /// + public virtual Spell? AdvancedApocryphalSpell { get; set; } + + /// + /// Связи с божествами, которые используют этот домен. + /// + public virtual ICollection DeityDomains { get; set; } = new List(); +} diff --git a/Pf2eModel/Pf2eDbContext.cs b/Pf2eModel/Pf2eDbContext.cs index 4d314e8..442853a 100644 --- a/Pf2eModel/Pf2eDbContext.cs +++ b/Pf2eModel/Pf2eDbContext.cs @@ -89,6 +89,8 @@ public partial class Pf2eDbContext : DbContext public virtual DbSet DeityWeapons { get; set; } + public virtual DbSet Domains { get; set; } + public virtual DbSet Entities { get; set; } public virtual DbSet EntityAliases { get; set; } diff --git a/Pf2eModel/Pf2eDbContextModel.cs b/Pf2eModel/Pf2eDbContextModel.cs index f203006..d94525a 100644 --- a/Pf2eModel/Pf2eDbContextModel.cs +++ b/Pf2eModel/Pf2eDbContextModel.cs @@ -393,6 +393,42 @@ public partial class Pf2eDbContext BindEntity(entity); }); + // Domain + modelBuilder.Entity(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 modelBuilder.Entity(entity => { @@ -425,7 +461,10 @@ public partial class Pf2eDbContext entity.HasMany(e => e.Skills).WithMany(); }); modelBuilder.Entity(entity => { }); - modelBuilder.Entity(entity => { }); + modelBuilder.Entity(entity => + { + // Связь теперь настроена в конфигурации Domain + }); modelBuilder.Entity(entity => { entity