6

Ich habe eine Frage zum Definieren von Fremdschlüssel in EF Code First Fluent API. Ich habe ein Szenario wie folgt:Angeben von Fremdschlüssel-Framework-Code Zuerst Fluent Api

Zwei Klasse Person und Auto. In meinem Szenario kann Car Person zuweisen oder nicht (eine oder Null-Beziehung). Code:

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

In meinem Beispiel möchte ich Fremdschlüssel PersonId zu PPPPP umbenennen. In meinem Mapping sage ich:

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

Aber meine Beziehung ist eine Null und ich fürchte, ich WithMany Methode verwechseln mit, aber EF erzeugt Datenbank mit dem richtigen Zuordnungen, und alles funktioniert gut.

Bitte sagen Sie, wenn ich falsch in meinem Fluent API-Code oder es ist ein guter Weg zu tun, wie jetzt getan wird.

Danke für Hilfe.

Antwort

3

Ich sehe kein Problem mit der Verwendung von fließenden API hier. Wenn Sie die Navigationseigenschaft der Sammlung (z. B. Cars) in der Klasse Person nicht verwenden möchten, können Sie das Argument unter WithMany Methode verwenden.

+0

Ok, danke für die Antwort. – patryko88

+0

Wie können Sie eine Beziehung "eins zu eins (null oder null)" haben und den WithMany() - Teil der Fluent-API verwenden? @ patryko88 Hast du deinen Code so benutzt, wie du willst? Wenn ja, könnten Sie die Antwort posten? Vielen Dank! –

+0

@BrianBehm EF ermöglicht es Ihnen, Navigationseigenschaften auf beiden Seiten einer Eins-zu-Eins-Beziehung nur dann zu haben, wenn Sie das PK-Mapping freigegeben haben. Durch Auslassen der Sammlungseigenschaft sieht die Beziehung _ eins-zu-eins ähnlich aus. – Eranga

Verwandte Themen