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);
}
///
/// 配置数据库结构,
/// 关系映射
/// 索引配置
///
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 联合主键设置
modelBuilder.Entity().HasKey(pk => new { pk.MenuId, pk.RoleId });
modelBuilder.Entity().HasKey(pk => new { pk.UserId, pk.RoleId });
// 文件库中时间转换 string<->timespan
ValueConverter timeValueConverter = new ValueConverter(
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().Property(p => p.UploadTime).HasConversion(timeValueConverter);
// 菜单表中字体图标值转换 编号string<->字符string
ValueConverter iconValueConverter = new ValueConverter(
v => string.IsNullOrEmpty(v) ? null : ((int)v.ToArray()[0]).ToString("x"),
v => v == null ? "" : ((char)int.Parse(v, NumberStyles.HexNumber)).ToString());
modelBuilder.Entity().Property(p => p.MenuIcon).HasConversion(iconValueConverter);
// 出入记录的时间转换
modelBuilder.Entity().Property(p => p.EnterTime).HasConversion(timeValueConverter);
modelBuilder.Entity().Property(p => p.LeaveTime).HasConversion(timeValueConverter);
}
public DbSet UpgradeFile { get; set; }
public DbSet SysUserInfo { get; set; }
public DbSet RoleInfo { get; set; }
public DbSet MenuInfo { get; set; }
public DbSet RoleMenu { get; set; }
public DbSet UserRole { get; set; }
public DbSet AutoColor { get; set; }
public DbSet LicenseColor { get; set; }
public DbSet FeeModel { get; set; }
public DbSet AutoRegister { get; set; }
// 20210315
public DbSet RecordInfo { get; set; }
public DbSet BillingInfo { get; set; }
}
}