2021-12-12 06:55:48 +00: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 09:01:24 +00:00
public DbSet < RpcLog > RpcLogs { get ; set ; }
2021-12-12 06:55:48 +00: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 )
{
2022-11-07 04:52:13 +00:00
return new DataContext ( "server=127.0.0.1;database=iotgateway;user=iot;CharSet=utf8mb4;password=iot123456;port=3306;Allow User Variables=True;" , DBTypeEnum . MySql ) ;
2021-12-12 06:55:48 +00:00
}
}
}