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.
Ok, grazie per la risposta. – patryko88
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! –
@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