iotgateway/IoTGateway.DataAccess/DataContext.cs

88 lines
2.8 KiB
C#
Raw Normal View History

2021-12-12 14:55:48 +08:00
using System.Linq;
using System.Threading.Tasks;
using IoTGateway.Model;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using WalkingTec.Mvvm.Core;
namespace IoTGateway.DataAccess
{
public class DataContext : FrameworkContext
{
public DbSet<FrameworkUser> FrameworkUsers { get; set; }
public DbSet<Device> Devices { get; set; }
public DbSet<DeviceConfig> DeviceConfigs { get; set; }
public DbSet<DeviceVariable> DeviceVariables { get; set; }
public DbSet<Driver> Drivers { get; set; }
public DbSet<SystemConfig> SystemConfig { get; set; }
2022-04-13 17:01:24 +08:00
public DbSet<RpcLog> RpcLogs { get; set; }
2021-12-12 14:55:48 +08:00
public DataContext(CS cs)
: base(cs)
{
}
public DataContext(string cs, DBTypeEnum dbtype)
: base(cs, dbtype)
{
}
public DataContext(string cs, DBTypeEnum dbtype, string version = null)
: base(cs, dbtype, version)
{
}
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
public override async Task<bool> DataInit(object allModules, bool IsSpa)
{
var state = await base.DataInit(allModules, IsSpa);
bool emptydb = false;
try
{
emptydb = Set<FrameworkUser>().Count() == 0 && Set<FrameworkUserRole>().Count() == 0;
}
catch { }
if (state == true || emptydb == true)
{
//when state is true, means it's the first time EF create database, do data init here
//当state是true的时候表示这是第一次创建数据库可以在这里进行数据初始化
var user = new FrameworkUser
{
ITCode = "admin",
Password = Utils.GetMD5String("000000"),
IsValid = true,
Name = "Admin"
};
var userrole = new FrameworkUserRole
{
UserCode = user.ITCode,
RoleCode = "001"
};
Set<FrameworkUser>().Add(user);
Set<FrameworkUserRole>().Add(userrole);
await SaveChangesAsync();
}
return state;
}
}
/// <summary>
/// DesignTimeFactory for EF Migration, use your full connection string,
/// EF will find this class and use the connection defined here to run Add-Migration and Update-Database
/// </summary>
public class DataContextFactory : IDesignTimeDbContextFactory<DataContext>
{
public DataContext CreateDbContext(string[] args)
{
return new DataContext("Data Source = ../IoTGateway/iotgateway.db", DBTypeEnum.SQLite);
}
}
}