CourseWork_Borschevskaya_A..../Hospital/HospitalDatabaseImplement/HospitalDatabase.cs

62 lines
2.9 KiB
C#
Raw Normal View History

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
{
public class HospitalDatabase : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured == false)
{
optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=HospitalDatabaseFull;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
}
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// решение проблемы с циклическим удалением - запрет на удаление аптекарей, если они связаны с другими сущностями
modelBuilder
.Entity<Medicine>().HasOne(e => e.Apothecary)
.WithMany(e => e.Medicines)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder
.Entity<Recipe>().HasOne(e => e.Apothecary)
.WithMany(e => e.Recipes)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder
.Entity<Prescription>().HasOne(e => e.Apothecary)
.WithMany(e => e.Prescriptions)
.OnDelete(DeleteBehavior.Restrict);
// при удалении лечения зануляем данное поле у пациентов
// можно было ввести статус записи лечения - активный/неактивный, но по заданию функционала удаления лечений нет
modelBuilder
.Entity<Patient>().HasOne(e => e.Treatment)
.WithMany(e => e.Patients)
.OnDelete(DeleteBehavior.SetNull);
}
public virtual DbSet<Apothecary> Apothecaries { set; get; }
public virtual DbSet<Recipe> Recipes { set; get; }
public virtual DbSet<Medicine> Medicines { set; get; }
public virtual DbSet<Prescription> Prescriptions { set; get; }
public virtual DbSet<Patient> Patients { set; get; }
public virtual DbSet<Procedure> Procedures { set; get; }
public virtual DbSet<Treatment> Treatments { set; get; }
public virtual DbSet<RecipeMedicine> RecipeMedicines { set; get; }
public virtual DbSet<RecipeTreatment> RecipeTreatments { set; get; }
public virtual DbSet<ProcedureMedicine> ProcedureMedicines { set; get; }
public virtual DbSet<TreatmentProcedure> TreatmentProcedures { set; get; }
}
}