20230201_145_upperpc/InSituLaboratory.ORM/NoimptyDbContext.cs
2024-03-11 13:12:02 +08:00

63 lines
2.4 KiB
C#

using InSituLaboratory.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using System.Globalization;
namespace InSituLaboratory.ORM
{
public class NoimptyDbContext : DbContext
{
public NoimptyDbContext(DbContextOptions<NoimptyDbContext> options) : base(options)
{ }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseMySql("server=localhost;port=3306;database=20240301_insitulaboratory;user=root;password=zttZTT1234", new MySqlServerVersion(new Version(8, 0, 33)));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 联合主键
modelBuilder.Entity<RoleMenu>()
.HasKey(pk => new { pk.RoleId, pk.MenuId });
modelBuilder.Entity<RoleUser>()
.HasKey(pk => new { pk.RoleId, pk.UserId });
//角色表的一对多关系 角色对用户
modelBuilder.Entity<RoleUser>()
.HasOne(u => u.SysRole)
.WithMany(r => r.Users)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<RoleMenu>()
.HasOne(u => u.SysRole)
.WithMany(r => r.Menus)
.OnDelete(DeleteBehavior.Cascade);
//用户对角色
modelBuilder.Entity<RoleUser>()
.HasOne(u => u.User)
.WithMany(r => r.Roles);
// 页面-》数据库的转换
// 数据库-》页面的转换
ValueConverter iconValueConverter =
new ValueConverter<string, string>(
p2d => string.IsNullOrEmpty(p2d) ? null : ((int)p2d.ToArray()[0]).ToString("x"),
d2p => d2p == null ? "" : ((char)int.Parse(d2p, NumberStyles.HexNumber)).ToString()
);
modelBuilder.Entity<SysMenu>()
.Property(m => m.MenuIcon)
.HasConversion(iconValueConverter);
}
public virtual DbSet<SysUser> SysUser { get; set; }
public virtual DbSet<SysMenu> SysMenu { get; set; }
public virtual DbSet<SysRole> SysRole { get; set; }
public virtual DbSet<RoleMenu> RoleMenu { get; set; }
public virtual DbSet<RoleUser> RoleUser { get; set; }
}
}