6

Tengo una pregunta sobre la definición de la clave externa en la API de primer código de EF. Tengo un escenario como este:Especificación del código del marco de la entidad de clave externa Primero, Api fluido

Dos clase persona y coche. En mi escenario, el coche puede haber asignado Persona o no (relación uno o cero). Código:

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); 
    } 
} 

En mi muestra Quiero cambiar el nombre de PERSONID clave externa a PPPPP. En mi mapeo digo:

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

Pero mi relación es de uno a cero y me temo que engaño mediante el método WithMany, pero EF genero base de datos con las asignaciones apropiadas, y todo funciona bien.

Por favor, diga si me equivoco en mi código de API de Fluent o si la forma de hacerlo es como está hecho.

Gracias por la ayuda.

Respuesta

3

No veo un problema con el uso de la API con fluidez aquí. Si no desea la propiedad de navegación de recopilación (es decir, Cars) en la clase Person, puede utilizar el método menos WithMany.

+0

Ok, gracias por responder. – patryko88

+0

¿Cómo puede tener una relación "uno a (uno o cero)" y usar la porción WithMany() de la API Fluent? @ patryko88 ¿conseguiste que tu código funcionara como lo querías? Si es así, ¿podría publicar la respuesta? ¡Gracias! –

+0

@BrianBehm EF le permite tener propiedades de navegación en ambos lados de una relación de uno a uno solo si ha compartido la asignación de PK. Al omitir la propiedad de recopilación, la relación _se parece a uno-a-uno. – Eranga

Cuestiones relacionadas