BOContext.decl.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using BO.AppServer.Metadata.Configuration;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Logging;
  5. using Microsoft.Extensions.Options;
  6. using Quadarax.Foundation.Core.Data.Extensions;
  7. namespace BO.AppServer.Data.Entity
  8. {
  9. public partial class BOContext
  10. {
  11. private readonly string _connectionString;
  12. private readonly ILogger _logger;
  13. public BOContext(DbContextOptions<BOContext> options, IOptions<Configuration> config, ILoggerFactory logger)
  14. : base(options)
  15. {
  16. if (config == null)
  17. throw new ArgumentNullException(nameof(config));
  18. _connectionString = config.Value.System.DbConnectionBO;
  19. if (logger == null)
  20. throw new ArgumentNullException(nameof(logger));
  21. _logger = logger.CreateLogger<BOContext>();
  22. }
  23. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  24. {
  25. if (!optionsBuilder.IsConfigured)
  26. {
  27. var cs = new ConnectionStringHelper(_connectionString);
  28. _logger.Log(LogLevel.Information, $"Connecting to database '{cs}' ...");
  29. optionsBuilder.UseSqlServer(_connectionString);
  30. }
  31. }
  32. partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
  33. {
  34. modelBuilder.Entity<Workspace>(entity =>
  35. {
  36. // WORKAROUND temporary solution for keyless entity
  37. //modelBuilder.Entity<UserWorkspace>()
  38. // .HasAlternateKey(x => x.Id);
  39. modelBuilder.Entity<UserWorkspace>()
  40. .HasKey(t => new { t.WorkspaceId, t.UserId });
  41. modelBuilder.Entity<UserWorkspace>()
  42. .HasOne(am => am.User)
  43. .WithMany(a => a.UserWorkspaces)
  44. .HasForeignKey(am => am.UserId).HasConstraintName("REL_BillingInfo_User");
  45. modelBuilder.Entity<UserWorkspace>()
  46. .HasOne(am => am.Workspace)
  47. .WithMany(m => m.UserWorkspaces)
  48. .HasForeignKey(am => am.WorkspaceId).HasConstraintName("REL_BillingInfo_Workspace");
  49. //modelBuilder.Entity<BillingInfo>().Metadata.AddIgnored("Workspace");
  50. modelBuilder.Entity<Workspace>().HasOne(d => d.BillingInfo)
  51. .WithOne(p => p.Workspace)
  52. .HasForeignKey<BillingInfo>(a => a.WorkspaceId)
  53. .OnDelete(DeleteBehavior.NoAction)
  54. .HasConstraintName("REL_Workspace_BillingInfo");
  55. modelBuilder.Entity<Workspace>().HasMany(w=>w.Structures)
  56. .WithOne(s => s.Workspace)
  57. .HasForeignKey(s => s.WorkspaceId)
  58. .HasConstraintName("REL_Structure_Workspace");
  59. modelBuilder.Entity<Workspace>().Navigation(w => w.Structures).AutoInclude();
  60. modelBuilder.Entity<Workspace>().Navigation(w => w.CreatedByUser).AutoInclude();
  61. modelBuilder.Entity<Workspace>().Navigation(w => w.ModifiedByUser).AutoInclude();
  62. modelBuilder.Entity<Structure>().Navigation(w => w.Metadocuments).AutoInclude();
  63. modelBuilder.Entity<Structure>().HasOne(d => d.CreatedByUser)
  64. .WithMany(p => p.StructureCreatedByUsers)
  65. .HasForeignKey(d => d.CreatedByUserId)
  66. .OnDelete(DeleteBehavior.ClientSetNull)
  67. .HasConstraintName("REL_Structure_User_Created");
  68. modelBuilder.Entity<Structure>().HasOne(d => d.ModifiedByUser)
  69. .WithMany(p => p.StructureModifiedByUsers)
  70. .HasForeignKey(d => d.ModifiedByUserId)
  71. .HasConstraintName("REL_Structure_User_Modified");
  72. modelBuilder.Entity<Metadocument>().Navigation(w => w.CreatedByUser).AutoInclude();
  73. modelBuilder.Entity<Metadocument>().Navigation(w => w.ModifiedByUser).AutoInclude();
  74. modelBuilder.Entity<Artifact>().Navigation(w => w.CreatedByUser).AutoInclude();
  75. modelBuilder.Entity<BillingPlan>().Navigation(w => w.CreatedByUser).AutoInclude();
  76. modelBuilder.Entity<BillingPlan>().Navigation(w => w.ModifiedByUser).AutoInclude();
  77. modelBuilder.Entity<MimeType>().Navigation(w => w.CreatedByUser).AutoInclude();
  78. modelBuilder.Entity<MimeType>().Navigation(w => w.ModifiedByUser).AutoInclude();
  79. }
  80. );
  81. }
  82. }
  83. }