Как бороться с ошибкой миграции «FOREIGN KEY»? - PullRequest
0 голосов
/ 17 июня 2019

Я использую EF Core Code First и общий репозиторий.До сих пор каждая миграция, которую я делал, работала так, как я ожидал.Я не могу больше выполнять миграцию, потому что я получаю эту ошибку

Failed executing DbCommand (47ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER TABLE [Appointments] ADD CONSTRAINT [FK_Appointments_AppointmentIntervals_AppointmentIntervalId] FOREIGN KEY ([AppointmentIntervalId]) REFERENCES [AppointmentIntervals] ([AppointmentIntervalId]) ON DELETE CASCADE;
Introducing FOREIGN KEY constraint 'FK_Appointments_AppointmentIntervals_AppointmentIntervalId' on table 'Appointments' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index. See previous errors.

НАЗНАЧЕНИЕ МОДЕЛИ

        [Key]
        public Guid AppointmentId { get; private set; }

        public Guid PatientId { get; private set; }
        [ForeignKey("PatientId")]
        public Patient Patient { get; private set; }

        public Guid DoctorId { get; private set; }
        [ForeignKey("DoctorId")]
        public Doctor Doctor { get; private set; }

        public DateTime AppointmentDate { get; private set; }

        public Guid? AppointmentIntervalId { get; private set; }
        [ForeignKey("AppointmentIntervalId")]
        public virtual AppointmentInterval AppointmentInterval { get; private set; }

        public bool HaveFeedback { get; private set; }

ИНТЕРВАЛ НАЗНАЧЕНИЯ МОДЕЛИ

        [Key]
        public Guid AppointmentIntervalId { get; private set; }
        public int Day { get; private set; }
        public TimeSpan StartHour { get; private set; }
        public TimeSpan EndHour { get; private set; }

        public Guid DoctorId { get; private set; }
        [ForeignKey("DoctorId")]
        public Doctor Doctor => null;

        public virtual List<Appointment> Appointments { get; private set; }

Я знаю, что это бесполезно, но я попробовал эти решения, указав DeleteBehavior.

 public DatabaseService(DbContextOptions<DatabaseService> options) : base(options)
        {
            //context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
            Database.EnsureCreated();
        }

        public DbSet<Patient> Patients { get; set; }
        public DbSet<Doctor> Doctors { get; set; }
        public DbSet<PatientHistory> PatientHistories { get; set; }
        public DbSet<Appointment> Appointments { get; set; }
        public DbSet<Feedback> Feedbacks { get; set; }
        public DbSet<BloodDonor> BloodDonors { get; set; }
        public DbSet<AppointmentInterval> AppointmentIntervals { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.SetNull;
            }


            modelBuilder.Entity<Appointment>().HasOne(t => t.AppointmentInterval).WithMany(s => s.Appointments)
                .HasForeignKey(bc => bc.AppointmentIntervalId).OnDelete(DeleteBehavior.Restrict);

        }

РЕДАКТИРОВАТЬ:

Хранилище GetAllAsync

public async Task<List<TEntity>> GetAllAsync(string[] includes)
        {  
            var query = DatabaseService.Set<TEntity>().AsQueryable();
            if (includes != null)
            {
                foreach (string include in includes)
                {

                    query = query.Include(include).AsNoTracking();

                }
            }

            return await query.ToListAsync();

        }

Я простодобавлены новые свойства для модели, и перенос базы данных не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...