EntityState.Deleted не работает, Remove (entity) работает?

Когда мы пытались прочитать записи, мы боролись с EF, а затем удалили эти записи в той же транзакции. Первоначально я использовал метод EntityState.Deleted, который выдает ошибку:

Операция не выполнена: отношение не может быть изменено, так как одно или несколько свойств внешнего ключа не могут иметь значение NULL. Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

Но если я изменю его на то, что у меня ниже, используя .Remove (), то все будет хорошо.

В чем разница и лучшие времена для использования .Remove () и .Deleted?Как я мог заставить это работать, используя метод .Deleted? Я попытался создать новый экземпляр контекста для моего хранилища для чтения и еще один для удаления, но затем получил ошибки, связанные с IEntityTracker может 'не отслеживать несколько экземпляров ... Я также попытался .Include при первоначальном чтении, чтобы загрузить зависимые записи в EF, чтобы он знал и удалял их. Я тоже попробовал. Сначала отключил прочитанные записи. Все безрезультатно.

Вот метод, о котором идет речь. Обратите внимание, что у меня есть общий репозиторий, в котором используется метод .Deleted, который хорошо мне служил до этого сценария (чтение, а затем удаление тех же записей).

//Delete Allocation Need and AllocatedContainers for alloc need id
public ActionConfirmation 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 allocNeeds = repository.SearchFor(
    x => x.FacilityId == intFacilityId
    && x.NeedSourceType == srcType
    && x.NeedSourceId == intNeedSourceId
).ToList();

//var deleteRepository = new Repository(); 

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

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