Структура сущности Код первого каскадного удаления для таблицы, имеющей несколько внешних ключей - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующие модели POCO, и я пытался включить каскадное удаление между клиентом и учеником, но получаю ошибку, которая:

Введение ограничения FOREIGN KEY «FK_dbo.Customers_dbo.Companies_CompanyId» в таблице «Клиенты» могут вызвать циклы или несколько каскадных путей. Укажите НА УДАЛИТЬ НЕТ ДЕЙСТВИЙ или ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЯ, или измените другие ограничения ИНОСТРАННОГО КЛЮЧА. Мог не создавать ограничения. Смотрите предыдущие ошибки.

Company.cs

public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Course> Courses { get; set; }
        public virtual ICollection<Customer> Customers { get; set; }
    }

Customer.cs

public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int CompanyId { get; set; }
        public virtual Company Company { get; set; }
        public virtual ICollection<Learner> Learners { get; set; }
    }

Course.cs

 public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CompanyId { get; set; }
    public virtual Company Company { get; set; }
    public virtual ICollection<Learner> Learners { get; set; }
}

Learner.cs

 public class Learner
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CustomerId { get; set; }
    public virtual Customer Customer { get; set; }
    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}

Файлы сопоставления имеют следующий вид:

 public class CompanyMapping : EntityTypeConfiguration<Company>
    {
        public CompanyMapping()
        {

        }
    }

    public class CourseMapping : EntityTypeConfiguration<Course>
    {
        public CourseMapping()
        {
            HasRequired(c => c.Company)
               .WithMany(comp => comp.Courses)
                .HasForeignKey(c => c.CompanyId);
        }
    }

    public class CustomerMapping : EntityTypeConfiguration<Customer>
    {
        public CustomerMapping()
        {
            HasRequired(cust => cust.Company)
               .WithMany(comp => comp.Customers)
               .HasForeignKey(cust => cust.CompanyId);
        }
    }

    public class LearnerMapping : EntityTypeConfiguration<Learner>
    {
        public LearnerMapping()
        {
            HasRequired(l => l.Customer)
                .WithMany(c=>c.Learners)
                .WillCascadeOnDelete(true);


            HasRequired(l => l.Course)
                .WithMany(c=>c.Learners)
                .WillCascadeOnDelete(true);
        }
    }

Следующие ситуации отлично работают

  • Когда я удаляю компанию, все ее клиенты, курсы и учащиеся автоматически удаляются.
  • При удалении слушатели курса также удаляются.
  • Когда я удаляю ученика, он также легко удаляется.

Желаемый результат

Когда я пытаюсь удалить клиента. Это не позволяет мне делать это из-за его учеников. Я хочу включить каскадное удаление для клиента и для ученика. Как добиться этого с помощью кода EF в первую очередь?

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