diff --git a/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs b/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs index 8822435..e00d55a 100644 --- a/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs +++ b/Hospital/HospitalDatabaseImplement/HospitalDatabase.cs @@ -1,5 +1,12 @@ using HospitalDatabaseImplement.Models; using Microsoft.EntityFrameworkCore; +using System.Reflection.Metadata; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; namespace HospitalDatabaseImplement { @@ -13,6 +20,26 @@ namespace HospitalDatabaseImplement } base.OnConfiguring(optionsBuilder); } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + // решение проблемы с циклическим удалением - запрет на удаление аптекарей, если они связаны с другими сущностями + modelBuilder + .Entity().HasOne(e => e.Apothecary) + .WithMany(e => e.Medicines) + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder + .Entity().HasOne(e => e.Apothecary) + .WithMany(e => e.Recipes) + .OnDelete(DeleteBehavior.Restrict); + + modelBuilder + .Entity().HasOne(e => e.Apothecary) + .WithMany(e => e.Prescriptions) + .OnDelete(DeleteBehavior.Restrict); + } public virtual DbSet Apothecaries { set; get; } public virtual DbSet Recipes { set; get; } public virtual DbSet Medicines { set; get; } diff --git a/Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.Designer.cs b/Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.Designer.cs similarity index 95% rename from Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.Designer.cs rename to Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.Designer.cs index ef464e0..158d2c2 100644 --- a/Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.Designer.cs +++ b/Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace HospitalDatabaseImplement.Migrations { [DbContext(typeof(HospitalDatabase))] - [Migration("20230405144953_InitialCreate")] - partial class InitialCreate + [Migration("20230406091825_InitCreate")] + partial class InitCreate { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -98,6 +98,7 @@ namespace HospitalDatabaseImplement.Migrations .HasColumnType("nvarchar(max)"); b.Property("Surname") + .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("TreatmentId") @@ -296,9 +297,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Medicine", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Medicines") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Apothecary"); @@ -318,9 +319,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Prescription", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Prescriptions") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("HospitalDatabaseImplement.Models.Medicine", "Medicine") @@ -356,9 +357,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Recipe", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Recipes") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Apothecary"); @@ -421,6 +422,15 @@ namespace HospitalDatabaseImplement.Migrations b.Navigation("Treatment"); }); + modelBuilder.Entity("HospitalDatabaseImplement.Models.Apothecary", b => + { + b.Navigation("Medicines"); + + b.Navigation("Prescriptions"); + + b.Navigation("Recipes"); + }); + modelBuilder.Entity("HospitalDatabaseImplement.Models.Medicine", b => { b.Navigation("Prescriptions"); diff --git a/Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.cs b/Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.cs similarity index 98% rename from Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.cs rename to Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.cs index bf85384..b7d646f 100644 --- a/Hospital/HospitalDatabaseImplement/Migrations/20230405144953_InitialCreate.cs +++ b/Hospital/HospitalDatabaseImplement/Migrations/20230406091825_InitCreate.cs @@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace HospitalDatabaseImplement.Migrations { /// - public partial class InitialCreate : Migration + public partial class InitCreate : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -60,7 +60,7 @@ namespace HospitalDatabaseImplement.Migrations Name = table.Column(type: "nvarchar(60)", maxLength: 60, nullable: false), Cost = table.Column(type: "float", nullable: false), Dose = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: false), - ApothecaryId = table.Column(type: "int", nullable: false, defaultValue: -1) + ApothecaryId = table.Column(type: "int", nullable: false) }, constraints: table => { @@ -70,7 +70,7 @@ namespace HospitalDatabaseImplement.Migrations column: x => x.ApothecaryId, principalTable: "Apothecaries", principalColumn: "Id", - onDelete: ReferentialAction.SetDefault); + onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( @@ -91,7 +91,7 @@ namespace HospitalDatabaseImplement.Migrations column: x => x.ApothecaryId, principalTable: "Apothecaries", principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( @@ -100,7 +100,7 @@ namespace HospitalDatabaseImplement.Migrations { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - Surname = table.Column(type: "nvarchar(max)", nullable: true), + Surname = table.Column(type: "nvarchar(max)", nullable: false), Name = table.Column(type: "nvarchar(max)", nullable: false), Patronymic = table.Column(type: "nvarchar(max)", nullable: true), BirthDate = table.Column(type: "datetime2", nullable: false), @@ -162,7 +162,7 @@ namespace HospitalDatabaseImplement.Migrations column: x => x.ApothecaryId, principalTable: "Apothecaries", principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Prescriptions_Medicines_MedicineId", column: x => x.MedicineId, diff --git a/Hospital/HospitalDatabaseImplement/Migrations/HospitalDatabaseModelSnapshot.cs b/Hospital/HospitalDatabaseImplement/Migrations/HospitalDatabaseModelSnapshot.cs index 913ba06..09f3225 100644 --- a/Hospital/HospitalDatabaseImplement/Migrations/HospitalDatabaseModelSnapshot.cs +++ b/Hospital/HospitalDatabaseImplement/Migrations/HospitalDatabaseModelSnapshot.cs @@ -95,6 +95,7 @@ namespace HospitalDatabaseImplement.Migrations .HasColumnType("nvarchar(max)"); b.Property("Surname") + .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("TreatmentId") @@ -293,9 +294,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Medicine", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Medicines") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Apothecary"); @@ -315,9 +316,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Prescription", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Prescriptions") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("HospitalDatabaseImplement.Models.Medicine", "Medicine") @@ -353,9 +354,9 @@ namespace HospitalDatabaseImplement.Migrations modelBuilder.Entity("HospitalDatabaseImplement.Models.Recipe", b => { b.HasOne("HospitalDatabaseImplement.Models.Apothecary", "Apothecary") - .WithMany() + .WithMany("Recipes") .HasForeignKey("ApothecaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Apothecary"); @@ -418,6 +419,15 @@ namespace HospitalDatabaseImplement.Migrations b.Navigation("Treatment"); }); + modelBuilder.Entity("HospitalDatabaseImplement.Models.Apothecary", b => + { + b.Navigation("Medicines"); + + b.Navigation("Prescriptions"); + + b.Navigation("Recipes"); + }); + modelBuilder.Entity("HospitalDatabaseImplement.Models.Medicine", b => { b.Navigation("Prescriptions"); diff --git a/Hospital/HospitalDatabaseImplement/Models/Apothecary.cs b/Hospital/HospitalDatabaseImplement/Models/Apothecary.cs index e5d2e4d..a1de5de 100644 --- a/Hospital/HospitalDatabaseImplement/Models/Apothecary.cs +++ b/Hospital/HospitalDatabaseImplement/Models/Apothecary.cs @@ -2,6 +2,7 @@ using HospitalContracts.ViewModels; using HospitalDataModels.Models; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; namespace HospitalDatabaseImplement.Models { @@ -15,6 +16,15 @@ namespace HospitalDatabaseImplement.Models [MaxLength(55)] public string Password { get; private set; } = string.Empty; + [ForeignKey("ApothecaryId")] + public virtual List Medicines { get; set; } = new(); + + [ForeignKey("ApothecaryId")] + public virtual List Recipes { get; set; } = new(); + + [ForeignKey("ApothecaryId")] + public virtual List Prescriptions { get; set; } = new(); + public static Apothecary? Create(ApothecaryBindingModel model) { if (model == null) diff --git a/Hospital/HospitalDatabaseImplement/Models/Medicine.cs b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs index 2055f22..3ef9684 100644 --- a/Hospital/HospitalDatabaseImplement/Models/Medicine.cs +++ b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs @@ -22,7 +22,7 @@ namespace HospitalDatabaseImplement.Models public string Dose { get; private set; } = string.Empty; [Required] - public int ApothecaryId { get; private set; } = -1; + public int ApothecaryId { get; private set; } public virtual Apothecary Apothecary { get; set; }