BoilerDbContext.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. using Microsoft.EntityFrameworkCore;
  2. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  3. using Quadarax.Foundation.Core.Data.Domain;
  4. using System.Reflection.Emit;
  5. namespace qdr.app.bundleboiler.data.Model
  6. {
  7. public class BoilerDbContext : DataDomain
  8. {
  9. public BoilerDbContext(DbContextOptions<BoilerDbContext> options) : base(options)
  10. {
  11. }
  12. public DbSet<Activity> Activities { get; set; }
  13. public DbSet<Artifact> Artifacts { get; set; }
  14. public DbSet<ArtifactAttribute> ArtifactAttributes { get; set; }
  15. public DbSet<Attachment> Attachments { get; set; }
  16. public DbSet<AttributeCategory> AttributeCategories { get; set; }
  17. public DbSet<Bundle> Bundles { get; set; }
  18. public DbSet<BundleAttribute> BundleAttributes { get; set; }
  19. public DbSet<Enumeration> Enumerations { get; set; }
  20. public DbSet<Project> Projects { get; set; }
  21. public DbSet<Realization> Realizations { get; set; }
  22. protected override void OnModelCreating(ModelBuilder modelBuilder)
  23. {
  24. base.OnModelCreating(modelBuilder);
  25. modelBuilder.Entity<Activity>(BuildActivity);
  26. modelBuilder.Entity<Artifact>(BuildArtifact);
  27. modelBuilder.Entity<ArtifactAttribute>(BuildArtifactAttribute);
  28. modelBuilder.Entity<Attachment>(BuildAttachment);
  29. modelBuilder.Entity<AttributeCategory>(BuildAttributeCategory);
  30. modelBuilder.Entity<Bundle>(BuildBundle);
  31. modelBuilder.Entity<BundleForkHash>(BuildBundleForkHash);
  32. modelBuilder.Entity<BundleEnvironmentHash>(BuildBundleEnvironmentHash);
  33. modelBuilder.Entity<BundleAttribute>(BuildBundleAttribute);
  34. modelBuilder.Entity<Enumeration>(BuildEnumeration);
  35. modelBuilder.Entity<Project>(BuildProject);
  36. modelBuilder.Entity<Realization>(BuildRealization);
  37. modelBuilder.Entity<RealizationForkHash>(BuildRealizationForkHash);
  38. modelBuilder.Entity<RealizationEnvironmentHash>(BuildRealizationEnvironmentHash);
  39. }
  40. private void BuildActivity(EntityTypeBuilder<Activity> builder)
  41. {
  42. builder.HasKey(x => x.Id);
  43. builder.Property(x => x.Code).IsRequired().HasMaxLength(50);
  44. builder.Property(x => x.Name).IsRequired().HasMaxLength(250);
  45. builder.Property(x => x.Description).HasMaxLength(500);
  46. builder.Property(x => x.ClassType).IsRequired();
  47. builder.HasOne(x => x.Parent)
  48. .WithMany(x => x.Activities)
  49. .IsRequired();
  50. }
  51. private void BuildArtifact(EntityTypeBuilder<Artifact> builder)
  52. {
  53. builder.HasKey(x => x.Id);
  54. builder.Property(x => x.VersionCode).IsRequired().HasMaxLength(20);
  55. builder.Property(x => x.Description).HasMaxLength(500);
  56. builder.Property(x => x.OrderNo).IsRequired();
  57. builder.HasOne(x => x.Type).WithMany().IsRequired().OnDelete(DeleteBehavior.NoAction);
  58. builder.HasOne(x => x.Parent)
  59. .WithMany(x => x.Artifacts)
  60. .IsRequired();
  61. builder.HasMany(x => x.Attributes)
  62. .WithOne(x => x.Owner)
  63. .IsRequired();
  64. }
  65. private void BuildArtifactAttribute(EntityTypeBuilder<ArtifactAttribute> builder)
  66. {
  67. builder.HasKey(x => x.Id);
  68. builder.HasOne(x => x.Parent)
  69. .WithMany()
  70. .IsRequired();
  71. builder.HasOne(x => x.Owner)
  72. .WithMany(x => x.Attributes)
  73. .IsRequired();
  74. }
  75. private void BuildAttachment(EntityTypeBuilder<Attachment> builder)
  76. {
  77. builder.HasKey(x => x.Id);
  78. builder.Property(x => x.FileName).IsRequired().HasMaxLength(250);
  79. builder.Property(x => x.ContentType).IsRequired().HasMaxLength(50);
  80. builder.Property(x => x.Content).IsRequired();
  81. builder.HasOne(x => x.Parent)
  82. .WithMany(x => x.Attachments)
  83. .IsRequired();
  84. }
  85. private void BuildAttributeCategory(EntityTypeBuilder<AttributeCategory> builder)
  86. {
  87. builder.HasKey(x => x.Id);
  88. builder.Property(x => x.Code).IsRequired().HasMaxLength(50);
  89. builder.Property(x => x.Name).IsRequired().HasMaxLength(250);
  90. builder.Property(x => x.Description).HasMaxLength(500);
  91. builder.Property(x => x.DefaultValue).HasMaxLength(500);
  92. builder.Property(x => x.ClassType).IsRequired();
  93. }
  94. private void BuildBundle(EntityTypeBuilder<Bundle> builder)
  95. {
  96. builder.HasKey(x => x.Id);
  97. builder.Property(x => x.Code).IsRequired().HasMaxLength(50);
  98. builder.Property(x => x.Name).IsRequired().HasMaxLength(250);
  99. builder.Property(x => x.Description).HasMaxLength(500);
  100. builder.Property(x => x.VersionMajor).IsRequired();
  101. builder.Property(x => x.VersionMinor).IsRequired();
  102. builder.Property(x => x.VersionRevision).IsRequired();
  103. builder.HasOne(x => x.BundleType)
  104. .WithMany()
  105. .IsRequired().OnDelete(DeleteBehavior.NoAction);
  106. builder.HasMany(x => x.Artifacts)
  107. .WithOne(x => x.Parent)
  108. .IsRequired();
  109. builder.HasMany(x => x.Attributes)
  110. .WithOne(x => x.Owner)
  111. .IsRequired();
  112. builder.HasMany(x => x.Realizations)
  113. .WithOne(x => x.Parent)
  114. .IsRequired();
  115. builder.HasMany(r => r.Forks)
  116. .WithMany()
  117. .UsingEntity<BundleForkHash>();
  118. builder.HasMany(x => x.Environments)
  119. .WithMany()
  120. .UsingEntity<BundleEnvironmentHash>();
  121. builder.HasOne(x => x.Follows)
  122. .WithMany(x => x.Covers)
  123. .IsRequired(false);
  124. }
  125. private void BuildBundleForkHash(EntityTypeBuilder<BundleForkHash> builder)
  126. {
  127. builder.HasKey(rf => new { rf.BundleId, rf.EnumerationId });
  128. builder.HasOne(rf => rf.Bundle)
  129. .WithMany()
  130. .HasForeignKey(rf => rf.BundleId)
  131. .OnDelete(DeleteBehavior.NoAction);
  132. builder.HasOne(rf => rf.Enumeration)
  133. .WithMany()
  134. .HasForeignKey(rf => rf.EnumerationId)
  135. .OnDelete(DeleteBehavior.NoAction);
  136. }
  137. private void BuildBundleEnvironmentHash(EntityTypeBuilder<BundleEnvironmentHash> builder)
  138. {
  139. builder.HasKey(rf => new { rf.BundleId, rf.EnumerationId });
  140. builder.HasOne(rf => rf.Bundle)
  141. .WithMany()
  142. .HasForeignKey(rf => rf.BundleId)
  143. .OnDelete(DeleteBehavior.NoAction);
  144. builder.HasOne(rf => rf.Enumeration)
  145. .WithMany()
  146. .HasForeignKey(rf => rf.EnumerationId)
  147. .OnDelete(DeleteBehavior.NoAction);
  148. }
  149. private void BuildBundleAttribute(EntityTypeBuilder<BundleAttribute> builder)
  150. {
  151. builder.HasKey(x => x.Id);
  152. builder.HasOne(x => x.Parent)
  153. .WithMany()
  154. .IsRequired();
  155. builder.HasOne(x => x.Owner)
  156. .WithMany(x => x.Attributes)
  157. .IsRequired();
  158. }
  159. private void BuildEnumeration(EntityTypeBuilder<Enumeration> builder)
  160. {
  161. builder.HasKey(x => x.Id);
  162. builder.Property(x => x.Code).IsRequired().HasMaxLength(50);
  163. builder.Property(x => x.Name).IsRequired().HasMaxLength(250);
  164. builder.Property(x => x.Description).HasMaxLength(500);
  165. builder.Property(x => x.ClassType).IsRequired();
  166. builder.Property(x => x.OrderNo).IsRequired();
  167. }
  168. private void BuildProject(EntityTypeBuilder<Project> builder)
  169. {
  170. builder.HasKey(x => x.Id);
  171. builder.Property(x => x.Code).IsRequired().HasMaxLength(50);
  172. builder.Property(x => x.Name).IsRequired().HasMaxLength(250);
  173. builder.Property(x => x.Description).HasMaxLength(500);
  174. builder.HasMany(x => x.Activities)
  175. .WithOne(x => x.Parent)
  176. .IsRequired();
  177. }
  178. private void BuildRealization(EntityTypeBuilder<Realization> builder)
  179. {
  180. builder.HasKey(x => x.Id);
  181. builder.Property(x => x.Merged).IsRequired();
  182. builder.Property(x => x.MergedToLinkSCM).HasMaxLength(500);
  183. builder.HasOne(x => x.Parent)
  184. .WithMany(x => x.Realizations)
  185. .IsRequired();
  186. builder.HasMany(x => x.Attachments)
  187. .WithOne(x => x.Parent)
  188. .IsRequired();
  189. builder.HasMany(r => r.Forks)
  190. .WithMany()
  191. .UsingEntity<RealizationForkHash>();
  192. builder.HasMany(x => x.Environments)
  193. .WithMany()
  194. .UsingEntity<RealizationEnvironmentHash>();
  195. builder.HasOne(x => x.BundleType)
  196. .WithMany()
  197. .IsRequired();
  198. }
  199. private void BuildRealizationForkHash(EntityTypeBuilder<RealizationForkHash> builder)
  200. {
  201. builder.HasKey(rf => new { rf.RealizationId, rf.EnumerationId });
  202. builder.HasOne(rf => rf.Realization)
  203. .WithMany()
  204. .HasForeignKey(rf => rf.RealizationId)
  205. .OnDelete(DeleteBehavior.NoAction);
  206. builder.HasOne(rf => rf.Enumeration)
  207. .WithMany()
  208. .HasForeignKey(rf => rf.EnumerationId)
  209. .OnDelete(DeleteBehavior.NoAction);
  210. }
  211. private void BuildRealizationEnvironmentHash(EntityTypeBuilder<RealizationEnvironmentHash> builder)
  212. {
  213. builder.HasKey(rf => new { rf.RealizationId, rf.EnumerationId });
  214. builder.HasOne(rf => rf.Realization)
  215. .WithMany()
  216. .HasForeignKey(rf => rf.RealizationId)
  217. .OnDelete(DeleteBehavior.NoAction);
  218. builder.HasOne(rf => rf.Enumeration)
  219. .WithMany()
  220. .HasForeignKey(rf => rf.EnumerationId)
  221. .OnDelete(DeleteBehavior.NoAction);
  222. }
  223. }
  224. }