You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
3.3 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using System;
using System.Globalization;
using System.Linq;
using Txgy.EWS.Server.Models;
namespace Txgy.EWS.Server.EFCore
{
public class EFCoreContext : DbContext
{
private string strConn = string.Empty;
public EFCoreContext()
{
/// 对于数据库结构的更新有用
/// 正式生产环境需要更新
//strConn = "Server=LAPTOP-EERSIA1O;Database=zx_sp;Trusted_Connection=True";
//strConn = "Server=LAPTOP-EERSIA1O;Database=zx_sp;Trusted_Connection=True";
// sql更新
}
public EFCoreContext(string connectionStr)
{
strConn = connectionStr;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//optionsBuilder.UseSqlServer(strConn);
optionsBuilder.UseSqlite(strConn);
}
/// <summary>
/// 配置数据库结构,
/// 关系映射
/// 索引配置
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 联合主键设置
modelBuilder.Entity<RoleMenu>().HasKey(pk => new { pk.MenuId, pk.RoleId });
modelBuilder.Entity<UserRole>().HasKey(pk => new { pk.UserId, pk.RoleId });
// 文件库中时间转换 string<->timespan
ValueConverter timeValueConverter = new ValueConverter<string, long>(
v => (DateTime.ParseExact(v, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture).Ticks - 621355968000000000) / 10000000,
v => new DateTime(v * 10000000 + 621355968000000000).ToString("yyyy-MM-dd HH:mm:ss"));
modelBuilder.Entity<UpgradeFile>().Property(p => p.UploadTime).HasConversion(timeValueConverter);
// 菜单表中字体图标值转换 编号string<->字符string
ValueConverter iconValueConverter = new ValueConverter<string, string>(
v => string.IsNullOrEmpty(v) ? null : ((int)v.ToArray()[0]).ToString("x"),
v => v == null ? "" : ((char)int.Parse(v, NumberStyles.HexNumber)).ToString());
modelBuilder.Entity<MenuInfo>().Property(p => p.MenuIcon).HasConversion(iconValueConverter);
// 出入记录的时间转换
modelBuilder.Entity<RecordInfo>().Property(p => p.EnterTime).HasConversion(timeValueConverter);
modelBuilder.Entity<RecordInfo>().Property(p => p.LeaveTime).HasConversion(timeValueConverter);
}
public DbSet<UpgradeFile> UpgradeFile { get; set; }
public DbSet<SysUserInfo> SysUserInfo { get; set; }
public DbSet<RoleInfo> RoleInfo { get; set; }
public DbSet<MenuInfo> MenuInfo { get; set; }
public DbSet<RoleMenu> RoleMenu { get; set; }
public DbSet<UserRole> UserRole { get; set; }
public DbSet<AutoColor> AutoColor { get; set; }
public DbSet<LicenseColor> LicenseColor { get; set; }
public DbSet<FeeModel> FeeModel { get; set; }
public DbSet<AutoRegister> AutoRegister { get; set; }
// 20210315
public DbSet<RecordInfo> RecordInfo { get; set; }
public DbSet<BillingInfo> BillingInfo { get; set; }
}
}