using System.Data.Common; using System.Data.Entity; using System.Data.Entity.Core.Objects; using System.Data.Entity.Infrastructure; using System.Data.Entity.ModelConfiguration.Conventions; using Abp.Domain.Entities; using Abp.EntityFramework.Extensions; using Abp.Notifications; using IwbZero.Authorization.Base.SystemInfo; using IwbZero.Authorization.Base.Users; using IwbZero.Authorization.Roles; using IwbZero.Authorization.Users; using IwbZero.MultiTenancy; namespace IwbZero.EntityFramework { public abstract class IwbZeroDbContext : IwbZeroCommonDbContext where TTenant : IwbTenant where TRole : IwbSysRole where TUser : IwbSysUser { /// /// Tenants /// public virtual IDbSet Tenants { get; set; } ///// ///// Editions. ///// //public virtual IDbSet Editions { get; set; } ///// ///// FeatureSettings. ///// //public virtual IDbSet FeatureSettings { get; set; } ///// ///// TenantFeatureSetting. ///// //public virtual IDbSet TenantFeatureSettings { get; set; } ///// ///// EditionFeatureSettings. ///// //public virtual IDbSet EditionFeatureSettings { get; set; } ///// ///// Background jobs. ///// //public virtual IDbSet BackgroundJobs { get; set; } /// /// User accounts /// public virtual IDbSet UserAccounts { get; set; } protected IwbZeroDbContext() { } protected IwbZeroDbContext(string nameOrConnectionString) : base(nameOrConnectionString) { } protected IwbZeroDbContext(DbCompiledModel model) : base(model) { } protected IwbZeroDbContext(DbConnection existingConnection, bool contextOwnsConnection) : base(existingConnection, contextOwnsConnection) { } protected IwbZeroDbContext(string nameOrConnectionString, DbCompiledModel model) : base(nameOrConnectionString, model) { } protected IwbZeroDbContext(ObjectContext objectContext, bool dbContextOwnsObjectContext) : base(objectContext, dbContextOwnsObjectContext) { } protected IwbZeroDbContext(DbConnection existingConnection, DbCompiledModel model, bool contextOwnsConnection) : base(existingConnection, model, contextOwnsConnection) { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //#region BackgroundJobInfo.IX_IsAbandoned_NextTryTime //modelBuilder.Entity() // .Property(j => j.IsAbandoned) // .CreateIndex("IX_IsAbandoned_NextTryTime", 1); //modelBuilder.Entity() // .Property(j => j.NextTryTime) // .CreateIndex("IX_IsAbandoned_NextTryTime", 2); //#endregion #region NotificationSubscriptionInfo.IX_NotificationName_EntityTypeName_EntityId_UserId modelBuilder.Entity() .Property(ns => ns.NotificationName) .CreateIndex("IX_NotificationName_EntityTypeName_EntityId_UserId", 1); modelBuilder.Entity() .Property(ns => ns.EntityTypeName) .CreateIndex("IX_NotificationName_EntityTypeName_EntityId_UserId", 2); modelBuilder.Entity() .Property(ns => ns.EntityId) .CreateIndex("IX_NotificationName_EntityTypeName_EntityId_UserId", 3); modelBuilder.Entity() .Property(ns => ns.UserId) .CreateIndex("IX_NotificationName_EntityTypeName_EntityId_UserId", 4); #endregion #region UserNotificationInfo.IX_UserId_State_CreationTime modelBuilder.Entity() .Property(un => un.UserId) .CreateIndex("IX_UserId_State_CreationTime", 1); modelBuilder.Entity() .Property(un => un.State) .CreateIndex("IX_UserId_State_CreationTime", 2); modelBuilder.Entity() .Property(un => un.CreationTime) .CreateIndex("IX_UserId_State_CreationTime", 3); #endregion #region UserLoginAttempt.IX_TenancyName_UserNameOrEmailAddress_Result modelBuilder.Entity() .Property(ula => ula.TenancyName) .CreateIndex("IX_TenancyName_UserNameOrEmailAddress_Result", 1); modelBuilder.Entity() .Property(ula => ula.UserNameOrEmailAddress) .CreateIndex("IX_TenancyName_UserNameOrEmailAddress_Result", 2); modelBuilder.Entity() .Property(ula => ula.Result) .CreateIndex("IX_TenancyName_UserNameOrEmailAddress_Result", 3); #endregion #region UserLoginAttempt.IX_UserId_TenantId modelBuilder.Entity() .Property(ula => ula.UserId) .CreateIndex("IX_UserId_TenantId", 1); modelBuilder.Entity() .Property(ula => ula.TenantId) .CreateIndex("IX_UserId_TenantId", 2); #endregion #region SysLog.Set_MaxLengths modelBuilder.Entity() .Property(e => e.ServiceName) .HasMaxLength(SysLog.MaxServiceNameLength); modelBuilder.Entity() .Property(e => e.MethodName) .HasMaxLength(SysLog.MaxMethodNameLength); modelBuilder.Entity() .Property(e => e.Parameters) .HasMaxLength(SysLog.MaxParametersLength); modelBuilder.Entity() .Property(e => e.ClientIpAddress) .HasMaxLength(SysLog.MaxClientIpAddressLength); modelBuilder.Entity() .Property(e => e.ClientName) .HasMaxLength(SysLog.MaxClientNameLength); modelBuilder.Entity() .Property(e => e.BrowserInfo) .HasMaxLength(SysLog.MaxBrowserInfoLength); modelBuilder.Entity() .Property(e => e.Exception) .HasMaxLength(SysLog.MaxExceptionLength); modelBuilder.Entity() .Property(e => e.CustomData) .HasMaxLength(SysLog.MaxCustomDataLength); #endregion #region Common Indexes modelBuilder.Conventions.AddAfter(new IndexingPropertyConvention(m => m.IsDeleted)); modelBuilder.Conventions.AddAfter(new IndexingPropertyConvention(m => m.TenantId)); modelBuilder.Conventions.AddAfter(new IndexingPropertyConvention(m => m.TenantId)); #endregion } } }