6

Ho una domanda sulla definizione di chiave esterna nell'API First Fluent in codice EF. Ho uno scenario come questo:Specificazione del codice del framework Entità chiave esterna Primo, Fluent Api

Due di classe Persona e Auto. Nel mio scenario, Car può aver assegnato Persona o non (una o una relazione zero). Codice:

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

Nel mio esempio voglio cambiare titolo PersonId chiave esterna PPPPP. Nel mio mappatura dico:

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

Ma il mio rapporto è uno a zero e ho paura io sbaglio usando il metodo withmany, ma EF generare database con mappature appropriate, e tutto funziona bene.

Si prega di dire se ho sbagliato nel mio codice API Fluent o è un buon modo per fare come ora è fatto.

Grazie per l'aiuto.

risposta

3

Non vedo un problema con l'uso dell'API fluente qui. Se non si desidera la proprietà di navigazione della raccolta (ad esempio: Cars) nella classe Person, è possibile utilizzare l'argomento meno il metodo WithMany.

+0

Ok, grazie per la risposta. – patryko88

+0

Come si può avere una relazione "uno a (uno o zero)" e utilizzare la parte WithMany() dell'API Fluent? @ patryko88 hai ottenuto il tuo codice per funzionare come volevi? Se sì, potresti pubblicare la risposta? Grazie! –

+0

@BrianBehm EF consente di avere proprietà di navigazione su entrambi i lati di una relazione uno-a-uno solo se si dispone di un mapping PK condiviso. Omettendo la proprietà della raccolta, la relazione sembra uguale_ one-to-one. – Eranga