using Microsoft.EntityFrameworkCore; using MiAssessment.Admin.Business.Entities; namespace MiAssessment.Admin.Business.Data; /// /// Admin 业务模块数据库上下文 /// 用于访问业务数据库中的所有业务表 /// public class AdminBusinessDbContext : DbContext { public AdminBusinessDbContext(DbContextOptions options) : base(options) { } #region 系统配置 /// /// 系统配置表 /// public DbSet Configs { get; set; } = null!; #endregion #region 内容管理 /// /// 轮播图表 /// public DbSet Banners { get; set; } = null!; /// /// 宣传图表 /// public DbSet Promotions { get; set; } = null!; #endregion #region 测评管理 /// /// 测评类型表 /// public DbSet AssessmentTypes { get; set; } = null!; /// /// 题目表 /// public DbSet Questions { get; set; } = null!; /// /// 报告分类表 /// public DbSet ReportCategories { get; set; } = null!; /// /// 题目分类映射表 /// public DbSet QuestionCategoryMappings { get; set; } = null!; /// /// 报告结论表 /// public DbSet ReportConclusions { get; set; } = null!; /// /// 测评记录表 /// public DbSet AssessmentRecords { get; set; } = null!; /// /// 测评答案表 /// public DbSet AssessmentAnswers { get; set; } = null!; /// /// 测评结果表 /// public DbSet AssessmentResults { get; set; } = null!; #endregion #region 用户管理 /// /// 用户表 /// public DbSet Users { get; set; } = null!; #endregion #region 订单管理 /// /// 订单表 /// public DbSet Orders { get; set; } = null!; #endregion #region 规划师管理 /// /// 规划师表 /// public DbSet Planners { get; set; } = null!; /// /// 规划预约表 /// public DbSet PlannerBookings { get; set; } = null!; #endregion #region 分销管理 /// /// 邀请码表 /// public DbSet InviteCodes { get; set; } = null!; /// /// 佣金记录表 /// public DbSet Commissions { get; set; } = null!; /// /// 提现记录表 /// public DbSet Withdrawals { get; set; } = null!; #endregion #region 业务介绍页管理 /// /// 业务介绍页表 /// public DbSet BusinessPages { get; set; } = null!; #endregion protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // ============================================= // Config 配置 // ============================================= modelBuilder.Entity(entity => { // ConfigKey 唯一索引 entity.HasIndex(e => e.ConfigKey) .IsUnique() .HasDatabaseName("UK_configs_key"); // ConfigValue 使用 nvarchar(max) entity.Property(e => e.ConfigValue) .HasColumnType("nvarchar(max)"); }); // ============================================= // User 配置 // ============================================= modelBuilder.Entity(entity => { // Uid 唯一索引 entity.HasIndex(e => e.Uid) .IsUnique() .HasDatabaseName("UK_users_uid"); // OpenId 唯一索引 entity.HasIndex(e => e.OpenId) .IsUnique() .HasDatabaseName("UK_users_open_id"); // 金额字段精度配置 entity.Property(e => e.Balance) .HasColumnType("decimal(10,2)"); entity.Property(e => e.TotalIncome) .HasColumnType("decimal(10,2)"); entity.Property(e => e.WithdrawnAmount) .HasColumnType("decimal(10,2)"); }); // ============================================= // AssessmentType 配置 // ============================================= modelBuilder.Entity(entity => { // Code 唯一索引 entity.HasIndex(e => e.Code) .IsUnique() .HasDatabaseName("UK_assessment_types_code"); // IntroContent 使用 nvarchar(max) entity.Property(e => e.IntroContent) .HasColumnType("nvarchar(max)"); // Price 精度配置 entity.Property(e => e.Price) .HasColumnType("decimal(10,2)"); }); // ============================================= // Question 配置 // ============================================= modelBuilder.Entity(entity => { // (AssessmentTypeId, QuestionNo) 复合唯一索引 entity.HasIndex(e => new { e.AssessmentTypeId, e.QuestionNo }) .IsUnique() .HasDatabaseName("UK_questions_type_no"); }); // ============================================= // QuestionCategoryMapping 配置 // ============================================= modelBuilder.Entity(entity => { // (QuestionId, CategoryId) 复合唯一索引 entity.HasIndex(e => new { e.QuestionId, e.CategoryId }) .IsUnique() .HasDatabaseName("UK_question_category_mappings"); }); // ============================================= // ReportConclusion 配置 // ============================================= modelBuilder.Entity(entity => { // Content 使用 nvarchar(max) entity.Property(e => e.Content) .HasColumnType("nvarchar(max)"); }); // ============================================= // Order 配置 // ============================================= modelBuilder.Entity(entity => { // OrderNo 唯一索引 entity.HasIndex(e => e.OrderNo) .IsUnique() .HasDatabaseName("UK_orders_order_no"); // 金额字段精度配置 entity.Property(e => e.Amount) .HasColumnType("decimal(10,2)"); entity.Property(e => e.PayAmount) .HasColumnType("decimal(10,2)"); entity.Property(e => e.RefundAmount) .HasColumnType("decimal(10,2)"); }); // ============================================= // Planner 配置 // ============================================= modelBuilder.Entity(entity => { // Price 精度配置 entity.Property(e => e.Price) .HasColumnType("decimal(10,2)"); }); // ============================================= // PlannerBooking 配置 // ============================================= modelBuilder.Entity(entity => { // BookingDate 使用 date 类型 entity.Property(e => e.BookingDate) .HasColumnType("date"); }); // ============================================= // InviteCode 配置 // ============================================= modelBuilder.Entity(entity => { // Code 唯一索引 entity.HasIndex(e => e.Code) .IsUnique() .HasDatabaseName("UK_invite_codes_code"); }); // ============================================= // Commission 配置 // ============================================= modelBuilder.Entity(entity => { // 金额字段精度配置 entity.Property(e => e.OrderAmount) .HasColumnType("decimal(10,2)"); entity.Property(e => e.CommissionRate) .HasColumnType("decimal(5,2)"); entity.Property(e => e.CommissionAmount) .HasColumnType("decimal(10,2)"); }); // ============================================= // Withdrawal 配置 // ============================================= modelBuilder.Entity(entity => { // WithdrawalNo 唯一索引 entity.HasIndex(e => e.WithdrawalNo) .IsUnique() .HasDatabaseName("UK_withdrawals_withdrawal_no"); // 金额字段精度配置 entity.Property(e => e.Amount) .HasColumnType("decimal(10,2)"); entity.Property(e => e.BeforeBalance) .HasColumnType("decimal(10,2)"); entity.Property(e => e.AfterBalance) .HasColumnType("decimal(10,2)"); }); // ============================================= // AssessmentAnswer 配置 // ============================================= modelBuilder.Entity(entity => { // (RecordId, QuestionId) 复合唯一索引 entity.HasIndex(e => new { e.RecordId, e.QuestionId }) .IsUnique() .HasDatabaseName("UK_assessment_answers_record_question"); }); // ============================================= // AssessmentResult 配置 // ============================================= modelBuilder.Entity(entity => { // 分数字段精度配置 entity.Property(e => e.Score) .HasColumnType("decimal(18,2)"); entity.Property(e => e.MaxScore) .HasColumnType("decimal(18,2)"); entity.Property(e => e.Percentage) .HasColumnType("decimal(18,2)"); }); // ============================================= // BusinessPage 配置 // ============================================= modelBuilder.Entity(entity => { // Status 索引 entity.HasIndex(e => e.Status) .HasDatabaseName("IX_business_pages_status"); }); } }