/* Enable-Migrations -ContextTypeName iSchedulerDB -MigrationsDirectory Migrations Update-Database -TargetMigration $InitialDatabase Add-Migration -name InitialDB -Force -Verbose Update-Database -Verbose Update-Database -TargetMigration InitialDB -Verbose -Force Add-Migration -name UpdateDB_01 -Force -Verbose Update-Database -TargetMigration UpdateDB_01 -Verbose -Force Add-Migration -name UpdateDB_02 -Force -Verbose */ namespace Vrh.iScheduler { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity; using System.Linq; using Vrh.XmlProcessing; /// /// Az ütemezésekhez szükséges adatmodell (DBContext). /// public class SchedulerDB : DbContext { #region Constructors /// /// A DBContext elõállítása az alapértelmezett kapcsolati sztringgel. /// public SchedulerDB() : this(ConnectionStringStore.GetSQL(SchConst.DEFAULT_SQLCONNECTIONSTRINGNAME)) { } /// /// A DBContext elõállítása /// paraméterben megadott kapcsolati sztringgel. /// /// Szabványos és szabályos SQL kapcsolati sztring. (Nem megnevezés!) public SchedulerDB(string connectionString) : base(connectionString) { // migráció ellenõrzése System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion(true)); } #endregion Constructors #region DbSets /// /// Az ütemezendõ ojektumokat tartalmazó táblázat. /// public virtual DbSet ScheduleObjects { get; set; } /// /// Az ütemezendõ ojektumokon végezhetõ mûveleteket tartalmazó táblázat. /// public virtual DbSet ScheduleOperations { get; set; } /// /// Az ütemezéseket tartalmazó táblázat. /// public virtual DbSet Schedules { get; set; } /// /// Sorozat ütemezések azonosítói és típusai. /// public virtual DbSet ScheduleSeries { get; set; } #endregion DbSets #region OnModelCreating /// /// A EF CodeFirst-ben nem elvégezhetõ vagy módosítandó dolgokat ebben /// az eseményben kell elvégezni. /// /// protected override void OnModelCreating(DbModelBuilder modelBuilder) { //modelBuilder.HasDefaultSchema("GoodBill"); //WA20160124: Sajnos az EF a kötelezõ idegen kulcsnál alapértelmezésként cascadeDelete értékét true-ra állítja, // ami sok esetben nem megfelelõ (nem is értem, miért true a default :(( ) // Ahol ez elõfordul, ott a ForeignKey-eket itt kell definiálni. // HasRequired = many oldal virtual property // WithMany = ha a one oldalon lett definiálva ICollection a many-ra, akkor azt kell ide írni, egyébként üres // HasForeignKey = many oldalon a foreign key mezõ modelBuilder.Entity().HasRequired(v => v.ScheduleObject) .WithMany(one => one.Schedules) .HasForeignKey(t => t.ScheduleObjectId) .WillCascadeOnDelete(false); modelBuilder.Entity().HasRequired(v => v.ScheduleOperation) .WithMany(one => one.Schedules) .HasForeignKey(t => t.ScheduleOperationId) .WillCascadeOnDelete(false); base.OnModelCreating(modelBuilder); } #endregion OnModelCreating } #region ScheduleObject class /// /// Ütemezhetõ objektumokat tartalmazó táblázat. /// Egy típus alatt egyedinek kell lennie az azonosítónak. /// [Table("ScheduleObjects", Schema = "iScheduler")] public partial class ScheduleObject { #region Properties /// /// Az ütemezett objektum belsõ egyedi azonosítója. /// [Key] public int Id { get; set; } /// /// Ütemezett objektum típusa. /// [Required, MaxLength(100), Index("IX_ScheduleObject_ObjectTypeObjectId", 1, IsUnique = true)] public string ObjectType { get; set; } /// /// Ütemezett objektum azonosítója. /// [Required, MaxLength(100), Index("IX_ScheduleObject_ObjectTypeObjectId", 2, IsUnique = true)] public string ObjectId { get; set; } /// /// Az ütemezett objektum publikus megnevezése. /// [Required, MaxLength(200)] public string ObjectName { get; set; } /// /// Ütemezett objektumcsoport azonosítója. /// [Required, MaxLength(100)] public string ObjectGroupId { get; set; } /// /// Gyûjtemény, mely azokat az ütemezéseket tartalmazza, /// amelyekben az objektum szerepel. /// public virtual ICollection Schedules { get; set; } #endregion Properties #region Constructor /// /// A ScheduleObject alapértelmezett konstruktora, /// melyben inicializálódik a Schedules gyûjtemény. /// public ScheduleObject() { Schedules = new HashSet(); } #endregion Constructor } #endregion ScheduleObject class #region ScheduleOperation class /// /// Ütemezhetõ objektumokon elvégezhetõ mûveletek. /// Egy típus alatt egyedinek kell lennie az azonosítónak. /// [Table("ScheduleOperations", Schema = "iScheduler")] public partial class ScheduleOperation { #region Properties /// /// A mûvelet egyedi belsõ azonosítója. /// [Key] public short Id { get; set; } /// /// Ütemezett objektum típusa. /// [Required, MaxLength(100), Index("IX_ScheduleOperation_ObjectTypeOperationId", 1, IsUnique = true)] public string ObjectType { get; set; } /// /// Ütemezett objektumon végezhetõ mûvelet "távoli" azonosítója. /// [Required, MaxLength(100), Index("IX_ScheduleOperation_ObjectTypeOperationId", 2, IsUnique = true)] public string OperationId { get; set; } /// /// Ütemezett objektumon végezhetõ mûvelet "távoli" megnevezése. /// [Required, MaxLength(200)] public string OperationName { get; set; } /// /// Gyûjtemény, mely azokat az ütemezéseket tartalmazza, /// amelyekben a mûvelet szerepel. /// public virtual ICollection Schedules { get; set; } #endregion Properties #region Constructor /// /// A ScheduleOperation alapértelmezett konstruktora, /// melyben a Schedules gyûjtemény inicializálása történik. /// public ScheduleOperation() { Schedules = new HashSet(); } #endregion Constructor } #endregion ScheduleOperation class #region Schedule class /// /// Ütemezéseket tartalmazó táblázat. /// [Table("Schedules", Schema = "iScheduler")] public partial class Schedule { #region Properties /// /// Az ütemezés egyedi belsõ azonosítója. /// [Key] public int Id { get; set; } /// /// Az adott (OperationTime) idõpontban végrehajtandó mûvelet ezen objektumhoz kapcsolódik. /// public int ScheduleObjectId { get; set; } /// /// Az adott (OperationTime) idõpontban végrehajtandó mûvelet azonosítója. /// public short ScheduleOperationId { get; set; } /// /// Ütemezés idõpontja, amikor végre kell hajtani a jelölt mûveletet a jelölt objektumon. /// public DateTime OperationTime { get; set; } /// /// Ütemezés állapota. Alapértelmezett értéke: ScheduleStates.Active (0) /// [Index(IsUnique = false)] public ScheduleStates State { get; set; } /// /// Annak a sorozat ütemezésnek az azonosítója, mely alapján az egyedi ütemezés létrejött. /// Ha nem sorozat ütemezés alapján (wizard) jön létre, akkor az értéke null. /// public int? ScheduleSeriesId { get; set; } /// /// Mûvelet végrehajtásakor visszakapott ReturnInfoJSON ReturnValue tulajdonság értékének tárolására. /// /// Csak akkor kerül bele érték, ha az iSchedulerMonitor service hajtja végre ScheduleExecute akciót. public int? ReturnValue { get; set; } /// /// Mûvelet végrehajtásakor visszakapott ReturnInfoJSON ReturnMessage tulajdonság értékének tárolására. /// /// Csak akkor kerül bele érték, ha az iSchedulerMonitor service hajtja végre ScheduleExecute akciót. public string ReturnMessage { get; set; } /// /// ScheduleObjectId idegen kulcshoz tartozó virtuális tulajdonság. /// [ForeignKey("ScheduleObjectId")] public virtual ScheduleObject ScheduleObject { get; set; } /// /// ScheduleOperationId idegen kulcshoz tartozó virtuális tulajdonság. /// [ForeignKey("ScheduleOperationId")] public virtual ScheduleOperation ScheduleOperation { get; set; } /// /// ScheduleSeriesId idegen kulcshoz tartozó virtuális tulajdonság. /// [ForeignKey("ScheduleSeriesId")] public virtual ScheduleSeriesOne ScheduleSeriesOne { get; set; } #endregion Properties #region Contructor /// /// A Schedule alapértelmezett konstruktora, melyben a State, és /// ScheduleSeriesId mezõk inicializálása történik meg. /// public Schedule() { State = ScheduleStates.Active; ScheduleSeriesId = null; } #endregion Contructor } #endregion Schedule class #region ScheduleSeriesOne class /// /// Sorozat ütemezéseket tartalmazó táblázat. /// /// /// A név ütközött valami egyéb összetevõvel, ezért a típus kapott egy "One" suffix-et. /// [Table("ScheduleSeries", Schema = "iScheduler")] public partial class ScheduleSeriesOne { /// /// Sorozat egyedi belsõ azonosítója. /// [Key] public int Id { get; set; } /// /// Sorozat típusa. /// [Required, MaxLength(20)] public string SeriesType { get; set; } /// /// Sorozat megnevezése, amelyet meg is mutatunk a manager-ben összefûzve a típussal /// TT-nnnnnnnn (id). /// [Required, MaxLength(100)] public string SeriesName { get; set; } /// /// Sorozat színjelölése. /// [MaxLength(30)] public string SeriesColor { get; set; } /// /// /// public virtual ICollection Schedules { get; set; } } #endregion ScheduleSeriesOne class }