Różnica między DbSet.Remove a DbContext.Entry (entity) .State = EntityState.Deleted

Rozważ następujący model jednostki:

public class Agreement : Entity
{
    public int AgreementId { get; set; }
    public virtual ICollection<Participant> Participants { get; set; }
}

public class Establishment : Entity
{
    public int EstablishmentId { get; set; }
}

public class Participant : Entity
{
    public int AgreementId { get; set; }
    public virtual Agreement Agreement { get; set; }

    public int EstablishmentId { get; set; }
    public virtual Establishment { get; set; }

    public bool IsOwner { get; set; }
}

Powód, dla którego nie ma bezpośredniegoICollection<Establishment> na jednostce Porozumienia wynika z własności IsOwner, która dalej definiuje relację wiele do wielu.

Relacja jest odwzorowana tak:

internal ParticipantOrm()
{
    ToTable(typeof(Participant).Name);

    HasKey(k => new { k.AgreementId, k.EstablishmentId });

    HasRequired(d => d.Agreement)
        .WithMany(p => p.Participants)
        .HasForeignKey(d => d.AgreementId)
        .WillCascadeOnDelete(true);

    HasRequired(d => d.Establishment)
        .WithMany()
        .HasForeignKey(d => d.EstablishmentId)
        .WillCascadeOnDelete(true);
}

Relacja jest jednokierunkowa, co oznacza, że ​​możesz dotrzeć do Uczestników tylko w ramach Umowy - nie możesz uzyskać dostępu do umów z Zakładu.

Teraz, ponieważ klucz podstawowy podmiotu Umowy jest częścią klucza podstawowego uczestnika gerund, a ponieważ kasowanie jest określone, spodziewam się, że umieszczenie Umowy w stanie Usunięte spowoduje również, że każdy podmiot w swojej kolekcji Uczestników zostanie również umieszczony w usunięty stan.

Wydaje się, że działa to podczas wywoływania Usuń na umowie DbSet:

// this works
dbContext.Agreements.Remove(agreement);
dbContext.SaveChanges();

Jednak wydaje się, że nie działa po prostu po ustawieniu stanu wpisu umowy na usunięty:

// this causes an exception when Participants is not empty
dbContext.Entry(agreement).State = EntityState.Deleted;
dbContext.SaveChanges();

Czy istnieje sposób, w jaki mogę zdefiniować relację, tak aby po prostu umieszczenie encji Umowy w usuniętym stanie również spowodowało, że odpowiednie elementy elementu kolekcji zostaną umieszczone w usuniętym stanie?

Aktualizacja

Czytałem o tym i dowiedziałem się, że chętny ładowanie kolekcji uczestników nie pomaga:

// eager loading does not help, this still breaks
var agreement = dbContext.Set<Agreement>()
    .Include(a => a.Participants)
    .FirstOrDefault();
dbContext.Entry(agreement).State = EntityState.Deleted;
dbContext.SaveChanges();

questionAnswers(1)

yourAnswerToTheQuestion