using Abp.BackgroundJobs; using Abp.Notifications; using Microsoft.EntityFrameworkCore; using VberZero.BaseSystem; using VberZero.BaseSystem.MultiTenancy; using VberZero.BaseSystem.Users; using VberZero.Workflow; using VberZero.Workflow.DesignInfo; using VberZero.Workflow.Persistence; namespace VberZero.EntityFramework; /// /// Vber Zero的基础 DbContext。 /// 从此类派生您的 DbContext 以拥有基本实体。 /// public abstract class VzDbContext : VzCommonDbContext where TSelf : VzDbContext { /// /// Tenants /// public virtual DbSet Tenants { get; set; } public virtual DbSet BackgroundJobs { get; set; } public virtual DbSet UserAccounts { get; set; } public virtual DbSet Notifications { get; set; } #region WORKFLOW public DbSet WorkflowEvents { get; set; } public DbSet WorkflowExecutionErrors { get; set; } public DbSet WorkflowExecutionPointers { get; set; } public DbSet WorkflowExtensionAttributes { get; set; } public DbSet WorkflowSubscriptions { get; set; } public DbSet WorkflowWorkflows { get; set; } public DbSet WorkflowWorkflowDefinitions { get; set; } public DbSet CommonWorkflowAuditors { get; set; } #endregion WORKFLOW ///// ///// Editions. ///// //public virtual DbSet Editions { get; set; } ///// ///// FeatureSettings. ///// //public virtual DbSet FeatureSettings { get; set; } ///// ///// TenantFeatureSetting. ///// //public virtual DbSet TenantFeatureSettings { get; set; } ///// ///// EditionFeatureSettings. ///// //public virtual DbSet EditionFeatureSettings { get; set; } /// /// /// /// protected VzDbContext(DbContextOptions options) : base(options) { } /// /// /// /// protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ChangeTablePrefix(); modelBuilder.Entity(b => { b.HasIndex(e => new { e.IsAbandoned, e.NextTryTime }); }); modelBuilder.Entity(b => { b.HasOne(p => p.DeleterUser) .WithMany() .HasForeignKey(p => p.DeleterUserId); b.HasOne(p => p.CreatorUser) .WithMany() .HasForeignKey(p => p.CreatorUserId); b.HasOne(p => p.LastModifierUser) .WithMany() .HasForeignKey(p => p.LastModifierUserId); b.HasIndex(e => e.TenancyName); }); modelBuilder.Entity(b => { b.HasIndex(e => new { e.TenantId, e.UserId }); b.HasIndex(e => new { e.TenantId, e.UserName }); b.HasIndex(e => new { e.TenantId, e.EmailAddress }); b.HasIndex(e => new { e.UserName }); b.HasIndex(e => new { e.EmailAddress }); }); #region AuditLog.Set_MaxLengths modelBuilder.Entity() .Property(e => e.ServiceName) .HasMaxLength(AuditLog.MaxServiceNameLength); modelBuilder.Entity() .Property(e => e.MethodName) .HasMaxLength(AuditLog.MaxMethodNameLength); modelBuilder.Entity() .Property(e => e.Parameters) .HasMaxLength(AuditLog.MaxParametersLength); modelBuilder.Entity() .Property(e => e.ClientIpAddress) .HasMaxLength(AuditLog.MaxClientIpAddressLength); modelBuilder.Entity() .Property(e => e.ClientName) .HasMaxLength(AuditLog.MaxClientNameLength); modelBuilder.Entity() .Property(e => e.BrowserInfo) .HasMaxLength(AuditLog.MaxBrowserInfoLength); modelBuilder.Entity() .Property(e => e.ExceptionMessage) .HasMaxLength(AuditLog.MaxExceptionMessageLength); modelBuilder.Entity() .Property(e => e.Exception) .HasMaxLength(AuditLog.MaxExceptionLength); modelBuilder.Entity() .Property(e => e.CustomData) .HasMaxLength(AuditLog.MaxCustomDataLength); #endregion AuditLog.Set_MaxLengths //modelBuilder.Entity(b => //{ // b.HasIndex(e => new { e.TenantId, e.Name }); //}); //modelBuilder.Entity(b => //{ // b.HasIndex(e => new { e.EditionId, e.Name }); //}); modelBuilder.ConfigWorkflow(); } }