Указание внешнего ключа Entity Framework Code First, Fluent API

У меня есть вопрос об определении внешнего ключа в EF Code First Fluent API. У меня такой сценарий:

Два класса Person и Car. В моем сценарии Car может иметь назначение Person или нет (одно или нулевое отношение). Код:

    public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Person Person { get; set; }
    public int? PPPPP { get; set; }
}

class TestContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public DbSet<Car> Cars { get; set; }

    public TestContext(string connectionString) : base(connectionString)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Car>()
                    .HasOptional(x => x.Person)
                    .WithMany()
                    .HasForeignKey(x => x.PPPPP)
                    .WillCascadeOnDelete(true);

        base.OnModelCreating(modelBuilder);
    }
}

В моем примере я хочу переименовать внешний ключ PersonId в PPPPP. В моем сопоставлении я говорю:

modelBuilder.Entity<Car>()
            .HasOptional(x => x.Person)
            .WithMany()
            .HasForeignKey(x => x.PPPPP)
            .WillCascadeOnDelete(true);

Но мое отношение равно нулю, и я боюсь, что ошибаюсь, используя метод WithMany, но EF генерирует базу данных с правильными сопоставлениями, и все работает хорошо.

Пожалуйста, скажите, если я ошибаюсь в своем коде Fluent API или это хороший способ сделать то, что сделано сейчас.

Спасибо за помощь.

7
задан Electric Coffee 24 November 2017 в 22:19
поделиться