/*
Update-Database -TargetMigration $InitialDatabase
Add-Migration -name FirstMigration -Force -Verbose
Add-Migration -name Update03 -Force -Verbose
Update-Database
*/

namespace Vrh.iScheduler.Report
{
    using System.Data.Entity;

    using Vrh.XmlProcessing;
    using Lib.Migrations;
    using System.Data.Entity.ModelConfiguration.Conventions;

    /// <summary>
    /// iSchedulerReport DBContext osztálya.
    /// </summary>
    public class SchedulerReportDbContext : DbContext
    {
        private static bool m_WasDBMigrationCheck = false;

        #region Constructors
        /// <summary>
        /// DBContext példány elkészítése az alapértelmezett kapcsolati sztring név felhasználásával.
        /// </summary>
        public SchedulerReportDbContext() : this(ActiveConnectionString)
        //public SchedulerReportDbContext() : this(@"data source = 192.168.77.150\SQLEXPRESS;initial catalog = LearALMNew; user id = sa; password=Vrh@54321;multipleactiveresultsets=True;Connection Timeout = 3600")
        {
            Configuration.LazyLoadingEnabled = true;
            if (!m_WasDBMigrationCheck)
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchedulerReportDbContext, Configuration>(true));
                m_WasDBMigrationCheck = true;
            }
        }
        /// <summary>
        /// DBContext példány elkészítése egy megadott szabványos és érvényes kapcsolati sztring felhasználásával.
        /// </summary>
        public SchedulerReportDbContext(string connectionString) : base(connectionString)
        {
            Configuration.LazyLoadingEnabled = true;
            if (!m_WasDBMigrationCheck)
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchedulerReportDbContext, Configuration>(true));
                m_WasDBMigrationCheck = true;
            }
        }
        #endregion Constructors

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            const string SCHEMANAME = "iSchedulerReports";
            modelBuilder.HasDefaultSchema(SCHEMANAME);
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            try { RegisterConnectionString(ConnectionStringStore.GetSQL(SRConstants.DEFAULT_CONNECTIONSTRINGNAME)); } catch { }
        }
        private static string ActiveConnectionString = null;
        /// <summary>
        /// Egy connectionstring regisztrálása a DBContext-be. A hívás után az 
        /// összes paraméter nélküli konstruktor hívás az itt megadott kapcsolatleíróra vonatkozik.
        /// </summary>
        /// <param name="cs"></param>
        public static void RegisterConnectionString(string cs) { ActiveConnectionString = cs; }

        /// <summary>
        /// A report csomagokat tartalmazó táblázat.
        /// </summary>
        public IDbSet<SchedulerReportPackage> SchedulerReportPackages { get; set; }

        /// <summary>
        /// Egy report csomag elemeit tartalmazó táblázat.
        /// </summary>
        public IDbSet<SchedulerReportPackageItem> SchedulerReportPackageItems { get; set; }
    }
}