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.
Ok, gracias por responder. – patryko88
¿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! –
@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