namespace EVCB_OCPP.Domain
{
    using EVCB_OCPP.Domain.Models.Database;
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class MainDBContext : DbContext
    {
        // 您的內容已設定為使用應用程式組態檔 (App.config 或 Web.config)
        // 中的 'MainDBContext' 連接字串。根據預設,這個連接字串的目標是
        // 您的 LocalDb 執行個體上的 'EVCB_OCPP.Domain.MainDBContext' 資料庫。
        // 
        // 如果您的目標是其他資料庫和 (或) 提供者,請修改
        // 應用程式組態檔中的 'MainDBContext' 連接字串。
        public MainDBContext()
            : base("name=MainDBContext")
        {
            this.Configuration.LazyLoadingEnabled = false;
            this.Database.CommandTimeout = 180;
        }

        /// <summary>
        /// DB coneection set
        /// </summary>
        public MainDBContext(string conn)
        {
            this.Database.Connection.ConnectionString = conn;
            this.Configuration.LazyLoadingEnabled = false;
            this.Database.CommandTimeout = 180;
        }

        // 針對您要包含在模型中的每種實體類型新增 DbSet。如需有關設定和使用
        // Code First 模型的詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkId=390109。

       

        public virtual DbSet<ConnectorStatus> ConnectorStatus { get; set; }

        public virtual DbSet<Customer> Customer { get; set; }

        public virtual DbSet<CustomerMachineComponent> CustomerMachineComponent { get; set; }

        public virtual DbSet<Machine> Machine { get; set; }

        public virtual DbSet<MachineComponent> MachineComponent { get; set; }

        public virtual DbSet<MachineConfiguration> MachineConfiguration { get; set; }

        public virtual DbSet<MachineError> MachineError { get; set; }

        public virtual DbSet<MachineModel> MachineModel { get; set; }

        public virtual DbSet<MachineOperateRecord> MachineOperateRecord { get; set; }

        public virtual DbSet<MachineVersion> MachineVersion { get; set; }

        public virtual DbSet<MachinePart> MachinePart { get; set; }

        public virtual DbSet<MachineVersionFile> MachineVersionFile { get; set; }

        public virtual DbSet<PublishVersion> PublishVersion { get; set; }

        public virtual DbSet<PublishVersionFile> PublishVersionFile { get; set; }

        public virtual DbSet<ServerMessage> ServerMessage { get; set; }

        public virtual DbSet<TransactionRecord> TransactionRecord { get; set; }

        public virtual DbSet<UploadFile> UploadFile { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<MachineVersion>()
                .HasRequired(a => a.Machine)
                .WithMany()
                .HasForeignKey(a => a.MachineId);


            modelBuilder.Entity<Machine>()
                .HasOptional(m => m.FW_MachineVersion)
                .WithMany()
                .HasForeignKey(m => m.FW_AssignedMachineVersionId);


            modelBuilder.Entity<PublishVersion>()
                .HasRequired(a => a.CustomerMachineComponent)
                .WithMany()
                .HasForeignKey(a => a.CustomerMachineComponentId)
                .WillCascadeOnDelete(false);


            modelBuilder.Entity<Machine>().Property(x => x.Longitude).HasPrecision(10, 6);
            modelBuilder.Entity<Machine>().Property(x => x.Latitude).HasPrecision(10, 6);

            base.OnModelCreating(modelBuilder);

        }
    }




}