Como atualizar o FK para nulo ao excluir a entidade relacionada opcional

Sou razoavelmente novo na EF e estou lutando um pouco para facilitar a exclusão de meus objetos. Meus dois objetos e o DbContext associado têm a seguinte aparência:

public class Context: DbContext
{
    public Context() : base(){}
    public DbSet<Person> Persons {get;set;}
    public DbSet<Vehicle> Vehicles {get;set;}
}

public class Person
{
   public int PersonID {get;set;}
   public string Name {get;set;}
}

public class Vehicle
{
   public int VehicleID {get;set;}

   public int? PersonID {get;set;}

   [ForeignKey("PersonID")]
   public virtual Person Person {get;set;}
} 

Conforme mencionado acima, uma pessoa pode ser vinculada a vários veículos. Não existe um link explícito da pessoa para o veículo, mas existe um link do veículo para uma pessoa 'pai' através do relacionamento de chave estrangeira.

Em seguida, crio vários veículos no meu código e os vinculo aopcional objetos de pessoa (chave estrangeira é anulável).

Minha pergunta é sobre a exclusão de objetos Pessoa. Eu costumo excluir os objetos da seguinte maneira:

private void DeletePerson()
{
    using (var context = new Context())
    {
        int personID = 4; //Determined through other code
        var person = context.Persons.Find(personID);
        context.Persons.Remove(person);
        context.SaveChanges();
    }
}

No entanto, o código acima falharia, fornecendo uma exceção de restrição de referência (devido à chave estrangeira do veículo). No entanto, eu esperaria que a chave estrangeira de todos os veículos vinculados à pessoa específica fosse simplesmente definida como nula?

Consegui que o código funcionasse carregando explicitamente todos os veículos relevantes para o contexto da seguinte maneira:

private void DeletePerson()
{
    using (var context = new Context())
    {
        //Determined through other code
        int personID = 4; 
        // Single vehicle associated with this person, there can be multiple vehicles
        int vehicleID = 6; 

        var person = context.Persons.Find(personID);
        // Seems to force loading of the vehicle, facilitating setting 
        // its "PersonID" property to null
        var vehicle = context.Vehicles.Find(vehicleID); 
        context.Persons.Remove(person);
        context.SaveChanges();
    }
}

O problema com o código acima, no entanto, é que eu preciso criar um objeto List dentro da minha classe Person que contenha uma referência (ou ID) para todos os objetos dependentes em potencial (veículos é apenas um exemplo aqui, haverá várias outras classes semelhantes com relações semelhantes a Pessoa).

A criação desta lista no objeto Pessoa é a única maneira de fazer isso? E existe alguma maneira de automatizar a criação desta lista / automatizar a adição dos dependentes? Eu preferiria não ter que gerenciar explicitamente esses relacionamentos por meio de um objeto de lista na minha classe Person.

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion