EntityState.Deleted nie działa, czy usunąć (encja)?

Walczyłem z EF podczas próby odczytu rekordów, a następnie usunięcia tych rekordów w tej samej transakcji. Początkowo korzystałem z metody EntityState.Deleted, co spowodowałoby błąd:

Operacja nie powiodła się: nie można zmienić relacji, ponieważ jedna lub więcej właściwości klucza obcego jest niezawierająca wartości null. Po wprowadzeniu zmiany relacji powiązana właściwość klucza obcego jest ustawiana na wartość pustą. Jeśli klucz obcy nie obsługuje wartości null, musi zostać zdefiniowana nowa relacja, właściwość klucza obcego musi mieć przypisaną inną wartość inną niż null lub niepowiązany obiekt musi zostać usunięty.

Ale jeśli zmienię go na taki, jaki mam poniżej, używając .Remove (), to wszystko jest w porządku.

Jaka jest różnica i najlepsze czasy do użycia .Remove () vs .Deleted?Jak mogę zrobić tę pracę przy użyciu metody .Deleted? Próbowałem utworzyć nową instancję kontekstu do mojego repozytorium, aby przeczytać, a inną, aby usunąć, ale potem błędy związane z IEntityTracker nie mogą śledzić wielu instancji ... Próbowałem również .Include na początkowym czytaniu, aby załadować rekordy zależne do EF, aby wiedział o nich i je usuwał. Próbowałem też. Najpierw wyznaczyłem odczytane rekordy. Wszystko bezskutecznie.

Oto metoda, o której mowa. Zauważ, że mam ogólne repozytorium, które używa metody .Deleted, która dobrze mi służyła do tego scenariusza (czytanie, a następnie usuwanie tych samych rekordów).

//Delete Allocation Need and AllocatedContainers for alloc need id
public ActionConfirmation<int> DeleteAllocRecords(int intFacilityId, AllocNeedSourceTypes needSourceType, int intNeedSourceId)
{
var context = new InventoryMgmtContext();
var repository = new AllocationNeedRepository(context);

//Delete Allocation Need and hence children in Allocated Containers
var srcType = needSourceType.ToString();
List<AllocationNeed> allocNeeds = repository.SearchFor(
    x => x.FacilityId == intFacilityId
    && x.NeedSourceType == srcType
    && x.NeedSourceId == intNeedSourceId
).ToList();

//var deleteRepository = new Repository<AllocationNeed>(); <--tried separate instance of context to delete...no worky.

foreach (AllocationNeed allocNeed in allocNeeds)
{
    try
    {
        //NO WORK: context.Entry(allocNeed).State = System.Data.EntityState.Deleted;
        context.AllocationNeeds.Attach(allocNeed); 
        context.AllocationNeeds.Remove(allocNeed); <-- Works
        context.SaveChanges();
    }
    catch (Exception ex)
    {
        return ActionConfirmation<int>.CreateFailureConfirmation(ex.Message, allocNeed.Id);
    }
}

questionAnswers(2)

yourAnswerToTheQuestion