Тот факт, что, если у вас заполнено свойство навигации mandate.Person
, следующий оператор SQL ...
delete [dbo].[Mandates]
where (([Id] = @0) and ([PersonId] = @1))
... отправлено в базу данных, позволяет мне думать, что свойство навигации действительно должно быть заполнено человеком с правильным PersonId
для удаления родителя.
Понятия не имею, почему Entity Framework просто не отправляет оператор удаления с первичным ключом ...
delete [dbo].[Mandates]
where ([Id] = @0)
... как я и ожидал.
Редактировать
Если объект Mandate
имеет свойство внешнего ключа PersonId
для свойства навигации Person
, ожидаемый SQL (второй выше) отправляется в базу данных. В этом случае свойство навигации Person
может иметь значение null
, а значение свойства FK PersonId
не имеет значения.
Редактировать 2
Если вы не хотите вводить свойство FK, способ с наименьшими затратами DB-roundtrip, вероятно, будет заключаться в получении идентификатора человека и последующем создании фиктивного человека с этим ключом в памяти:
// ...
var personId = context.Mandates
.Where(m => m.Id == mandate.Id)
.Select(m => m.Person.Id)
.Single();
mandate.Person = new Person { Id = personId };
this.mandateRepository.Attach(mandate);
this.mandateRepository.Delete(mandate);
// ...