using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using MySql.Data.Entity;
using System.Linq;
using System.Text;
using EgtBEAMWALL.DbDataLayer.DatabaseModels;
using EgtBEAMWALL.DbDataLayer.Migrations;
using System.ServiceProcess;
//using EgtBEAMWALL.DataLayer.Migrations;
//using EgtBEAMWALL.DataLayer.Controllers;
namespace EgtBEAMWALL.DbDataLayer
{
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class DatabaseContext : DbContext
{
///
/// BTLParts management
///
public DbSet BTLPartList { get; set; }
///
/// Parts management
///
public DbSet ProdList { get; set; }
///
/// Parts management
///
public DbSet ProjList { get; set; }
///
/// Parts management
///
public DbSet RawPartList { get; set; }
///
/// Parts management
///
public DbSet PartList { get; set; }
#if false
///
/// Db data mode
///
public static bool AdvDataModel { get; set; } = false;
#endif
//providerName="System.Data.EntityClient"
public static string CONNECTION_STRING = $"server={Constants.DATABASE_SERV};port=3306;database={Constants.DATABASE_NAME};uid={Constants.DATABASE_USER};pwd={Constants.DATABASE_PWD};";
public DatabaseContext() : base(CONNECTION_STRING)
{
}
public static DatabaseContext Create()
{
return new DatabaseContext();
}
private static string getDbServiceName()
{
ServiceController[] services = ServiceController.GetServices();
var service = services.FirstOrDefault(s => s.ServiceName == "MariaDB");
if (service != null)
return service.DisplayName;
service = services.FirstOrDefault(s => s.ServiceName == "MySQL");
if (service != null)
return service.DisplayName;
return "";
}
public static bool SetUpDbConnectionAndDbConfig()
{
try
{
String serviceName = getDbServiceName();
if (serviceName.Equals(""))
{
return false;
}
ServiceController service = new ServiceController(serviceName);
try
{
TimeSpan timeout = TimeSpan.FromSeconds(Constants.DATABASE_PROCESS_TIMEOUT);
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
catch (Exception ex)
{
return false;
}
System.Data.Entity.Database.SetInitializer(null);
var migrator = new DbMigrator(new Configuration());
if (migrator.GetPendingMigrations().Any())
{
// Run migrations and seed.
migrator.Update();
}
}
catch (Exception ex)
{
return false;
}
return true;
}
}
}