Указание кода структуры сущности внешнего ключа во-первых, свободный API - PullRequest
7 голосов
/ 25 марта 2012

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

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

    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, или это хороший способ сделать, как сейчас.

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

1 Ответ

3 голосов
/ 25 марта 2012

Я не вижу проблемы с использованием свободного API здесь. Если вы не хотите, чтобы навигационное свойство коллекции (то есть: Cars) в классе Person, вы можете использовать метод аргумента less WithMany.

...