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