Entity Framework Cascading Удалить

Прежде всего, прошу прощения, если я упускаю некоторые базовые вещи здесь, но я новичок в EF и все еще думаю, как сначала настроить код БД ....

У меня похожая проблема с этимВведение ограничения FOREIGN KEY может привести к циклам или нескольким каскадным путям но я не могу понять из комментариев, что мне нужно делать с моей конкретной моделью. Когда я пытаюсь обновить базу данных после добавления вpublic virtual Actor actor { get; set; } к моему классу UseCase я получаю эту ошибку:

Introducing FOREIGN KEY constraint 'FK_dbo.UseCase_dbo.Actor_ActorID' on table 'UseCase' 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. See previous errors.

Я знаю, что это должно быть как-то связано с тем, как настроены мои ограничения FK (возможно, что-то, что связано с удалением варианта использования, что означает, что в итоге я буду удалять данные из нескольких других таблиц).

Я попытался отключить каскадное удаление, но все равно получаю ошибку:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //prevent table names created by entity framework being pluralised
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            //Turn off delete cascades between parent child tables. May need to put this back in future, but for the time being it is stopping the database being updated through the package manager console (error is that a foregin key constraint may cause cycles or multiple cascade paths) 
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        }

Вот мои модели. Что должно произойти, это то, что только если проект будет удален, он должен удалить сценарии использования или акторы. Актеры не должны быть удалены, когда есть UseCase, потому что они могут быть вовлечены в другие UseCase. Кто-нибудь может указать, что мне нужно изменить?

Наконец, правильная модель действительно таковаProject > Actors > Use Cases, Я предполагаю, что я должен просто удалитьpublic virtual int ProjectID { get; set; } а такжеpublic virtual Project project { get; set; } из UseCase?

Учиться больно!

 public class Project
    {
        public virtual int ID {get; set;}
        [DisplayName ("Project Name")]
        public virtual string ProjectName { get; set; }
        [DisplayName("Client")]    
        public virtual string ClientID { get; set; }
        public virtual string Description { get; set; }
        [DisplayName("Use Cases")]
        public virtual ICollection <UseCase> UseCases { get; set; } 

   }

public class UseCase

{
    public virtual int ID { get; set; }
    [Required]
    public virtual int ProjectID { get; set; }
    public virtual int ActorID { get; set; }
    [Required]
    public virtual Actor actor { get; set; }
    public virtual string Title { get; set; }
    public virtual Level? Level { get; set; }
    public virtual string Precondition { get; set; }
    public virtual string MinimalGuarantee { get; set; }
    public virtual string SuccessGuarantee { get; set; }
    public virtual ICollection<Step> Steps { get; set; }
    public virtual ICollection<Extension> Extensions { get; set; }
    public virtual ICollection<Query> Queries { get; set; }

}

public class Actor
{
    public virtual int ID { get; set; }
    public virtual int projectID { get; set; }
    public virtual Project project { get; set; } 
    public virtual string Title { get; set; }

    [DataType(DataType.MultilineText)]
    public virtual string Description { get; set; }

}

ОБНОВЛЕНО Итак, вот мой модифицированный код, основанный на отзывах ниже. Я все еще получаю ту же ошибку, либо когда я запускаю приложение и оно пытается создать БД, либо когда я пытаюсь обновить базу данных через менеджер пакетовUpdate-Database, Сводит меня с ума.

Для меня приведенный ниже код говорит, что если я удалю актера, удалите сценарии использования этого актера. Если я удаляю проект, удаляем актеров для проекта и, следовательно, удаляем сценарии использования для каждого актера. Но если я удаляю проект, не удаляйте варианты использования. Понятно, что я что-то неправильно понимаю :-(

    modelBuilder.Entity<Actor>()
    .HasMany(a => a.useCases)
    .WithRequired(uc => uc.actor)
    .HasForeignKey(uc => uc.ActorID)
    .WillCascadeOnDelete(true); // and this works

    modelBuilder.Entity<Project>()
    .HasMany(p => p.actors)
    .WithRequired(a => a.project)
    .HasForeignKey(a => a.projectID)
    .WillCascadeOnDelete(true); // this works

    modelBuilder.Entity<Project>()
    .HasMany(p => p.UseCases)
    .WithRequired(uc => uc.project)
    .HasForeignKey(uc => uc.ProjectID)
    .WillCascadeOnDelete(false); // disable this cascading delete

Ответы на вопрос(2)

Ваш ответ на вопрос