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 FrameworkUsers { get; set; } public DbSet Devices { get; set; } public DbSet DeviceConfigs { get; set; } public DbSet DeviceVariables { get; set; } public DbSet Drivers { get; set; } public DbSet SystemConfig { get; set; } 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 options) : base(options) { } public override async Task DataInit(object allModules, bool IsSpa) { var state = await base.DataInit(allModules, IsSpa); bool emptydb = false; try { emptydb = Set().Count() == 0 && Set().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().Add(user); Set().Add(userrole); await SaveChangesAsync(); } return state; } } /// /// 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 /// public class DataContextFactory : IDesignTimeDbContextFactory { public DataContext CreateDbContext(string[] args) { return new DataContext("Data Source = ../IoTGateway/iotgateway.db", DBTypeEnum.SQLite); } } }