mi-assessment/server/MiAssessment/src/MiAssessment.Admin.Business/Data/AdminBusinessDbContext.cs
zpc 8489b4300c refactor(config): 统一配置读取架构,运营配置从Admin库读取
- Model层新增AdminConfig实体和AdminConfigReadDbContext(只读连接Admin库)
- API项目新增AdminConnection连接字符串,注册AdminConfigReadDbContext
- Core层ConfigService按key路由:运营配置走Admin库,业务配置走业务库
- WechatPayConfigService改为从Admin库读取支付/小程序配置
- WechatService新增AdminConfigReadDbContext注入,配置读取改为Admin库
- Autofac注册同步更新三个服务的依赖注入
- Admin.Business的AdminConfigService改用AdminConfigDbContext连接Admin库
2026-02-20 15:48:16 +08:00

366 lines
11 KiB
C#

using Microsoft.EntityFrameworkCore;
using MiAssessment.Admin.Business.Entities;
namespace MiAssessment.Admin.Business.Data;
/// <summary>
/// Admin 业务模块数据库上下文
/// 用于访问业务数据库中的所有业务表
/// </summary>
public class AdminBusinessDbContext : DbContext
{
public AdminBusinessDbContext(DbContextOptions<AdminBusinessDbContext> options) : base(options)
{
}
#region
/// <summary>
/// 系统配置表
/// </summary>
public DbSet<Config> Configs { get; set; } = null!;
#endregion
#region
/// <summary>
/// 轮播图表
/// </summary>
public DbSet<Banner> Banners { get; set; } = null!;
/// <summary>
/// 宣传图表
/// </summary>
public DbSet<Promotion> Promotions { get; set; } = null!;
#endregion
#region
/// <summary>
/// 测评类型表
/// </summary>
public DbSet<AssessmentType> AssessmentTypes { get; set; } = null!;
/// <summary>
/// 题目表
/// </summary>
public DbSet<Question> Questions { get; set; } = null!;
/// <summary>
/// 报告分类表
/// </summary>
public DbSet<ReportCategory> ReportCategories { get; set; } = null!;
/// <summary>
/// 题目分类映射表
/// </summary>
public DbSet<QuestionCategoryMapping> QuestionCategoryMappings { get; set; } = null!;
/// <summary>
/// 报告结论表
/// </summary>
public DbSet<ReportConclusion> ReportConclusions { get; set; } = null!;
/// <summary>
/// 测评记录表
/// </summary>
public DbSet<AssessmentRecord> AssessmentRecords { get; set; } = null!;
/// <summary>
/// 测评答案表
/// </summary>
public DbSet<AssessmentAnswer> AssessmentAnswers { get; set; } = null!;
/// <summary>
/// 测评结果表
/// </summary>
public DbSet<AssessmentResult> AssessmentResults { get; set; } = null!;
#endregion
#region
/// <summary>
/// 用户表
/// </summary>
public DbSet<User> Users { get; set; } = null!;
#endregion
#region
/// <summary>
/// 订单表
/// </summary>
public DbSet<Order> Orders { get; set; } = null!;
#endregion
#region
/// <summary>
/// 规划师表
/// </summary>
public DbSet<Planner> Planners { get; set; } = null!;
/// <summary>
/// 规划预约表
/// </summary>
public DbSet<PlannerBooking> PlannerBookings { get; set; } = null!;
#endregion
#region
/// <summary>
/// 邀请码表
/// </summary>
public DbSet<InviteCode> InviteCodes { get; set; } = null!;
/// <summary>
/// 佣金记录表
/// </summary>
public DbSet<Commission> Commissions { get; set; } = null!;
/// <summary>
/// 提现记录表
/// </summary>
public DbSet<Withdrawal> Withdrawals { get; set; } = null!;
#endregion
#region
/// <summary>
/// 业务介绍页表
/// </summary>
public DbSet<BusinessPage> BusinessPages { get; set; } = null!;
#endregion
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// =============================================
// Config 配置
// =============================================
modelBuilder.Entity<Config>(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<User>(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<AssessmentType>(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<Question>(entity =>
{
// (AssessmentTypeId, QuestionNo) 复合唯一索引
entity.HasIndex(e => new { e.AssessmentTypeId, e.QuestionNo })
.IsUnique()
.HasDatabaseName("UK_questions_type_no");
});
// =============================================
// QuestionCategoryMapping 配置
// =============================================
modelBuilder.Entity<QuestionCategoryMapping>(entity =>
{
// (QuestionId, CategoryId) 复合唯一索引
entity.HasIndex(e => new { e.QuestionId, e.CategoryId })
.IsUnique()
.HasDatabaseName("UK_question_category_mappings");
});
// =============================================
// ReportConclusion 配置
// =============================================
modelBuilder.Entity<ReportConclusion>(entity =>
{
// Content 使用 nvarchar(max)
entity.Property(e => e.Content)
.HasColumnType("nvarchar(max)");
});
// =============================================
// Order 配置
// =============================================
modelBuilder.Entity<Order>(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<Planner>(entity =>
{
// Price 精度配置
entity.Property(e => e.Price)
.HasColumnType("decimal(10,2)");
});
// =============================================
// PlannerBooking 配置
// =============================================
modelBuilder.Entity<PlannerBooking>(entity =>
{
// BookingDate 使用 date 类型
entity.Property(e => e.BookingDate)
.HasColumnType("date");
});
// =============================================
// InviteCode 配置
// =============================================
modelBuilder.Entity<InviteCode>(entity =>
{
// Code 唯一索引
entity.HasIndex(e => e.Code)
.IsUnique()
.HasDatabaseName("UK_invite_codes_code");
});
// =============================================
// Commission 配置
// =============================================
modelBuilder.Entity<Commission>(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<Withdrawal>(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<AssessmentAnswer>(entity =>
{
// (RecordId, QuestionId) 复合唯一索引
entity.HasIndex(e => new { e.RecordId, e.QuestionId })
.IsUnique()
.HasDatabaseName("UK_assessment_answers_record_question");
});
// =============================================
// AssessmentResult 配置
// =============================================
modelBuilder.Entity<AssessmentResult>(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<BusinessPage>(entity =>
{
// Status 索引
entity.HasIndex(e => e.Status)
.HasDatabaseName("IX_business_pages_status");
});
}
}