Diferencia entre DbSet.Remove y DbContext.Entry (entidad) .State = EntityState.Deleted

Considere el siguiente modelo de entidad:

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; }
}

La razón por la que no hay una directaICollection<Establishment>&nbsp;en la entidad Acuerdo se debe a la propiedad IsOwner, que define aún más esta relación de muchos a muchos.

La relación se mapea así:

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);
}

La relación es unidireccional, lo que significa que solo puede acceder a los Participantes desde un Acuerdo; no puede acceder a los acuerdos del Establecimiento.

Ahora, dado que la clave principal de la entidad del Acuerdo es parte de la clave principal del Gerundio del Participante, y como se especifica la eliminación en cascada, esperaría que poner el Acuerdo en el estado Eliminado también causaría que cada entidad en su colección de Participantes también se incluya en la estado eliminado

Esto parece funcionar cuando se llama a Eliminar en un DbSet de Acuerdo:

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

Sin embargo, no parece funcionar cuando simplemente se configura el estado de la entrada de acuerdo a borrado:

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

¿Hay alguna manera en que pueda definir la relación de modo que simplemente poner la entidad del Acuerdo en el estado eliminado también hará que las entidades del elemento de la colección correspondiente se pongan en el estado eliminado?

Actualizar

He estado leyendo acerca de esto y descubrí que no es útil cargar la colección Participantes:

// 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();