2016-04-09 9 views
0

Ich habe zwei Klassen wie folgt.Wie kann man mit der Fluent API eins zu viele deklarieren, ohne das Modell zu ändern?

Jetzt möchte ich das Schema so konfigurieren, dass die Beziehung in der Datenbank festgelegt ist. Mit Fluent API werde ich so etwas machen.

protected override void OnModelCreating(DbModelBuilder model) 
{ 
    base.OnModelCreating(model); 
    model.HasDefaultSchema("dbo"); 
    ... 
    model.Entity<Monkey> 
    .HasRequired(_ => _.Donkey) 
    .WithMany(_ => _.Monkeys) 
    .Map(_ => _.MapKey("DonkeyId")); 
} 

Das Problem ist, dass jetzt ich habe eine Liste von Affen in dem Esel erklären. Und ich möchte das nicht tun. Ich möchte immer noch, dass der Affe mit einem Fremdschlüssel auf einen Esel zeigt, daher reicht der erforderliche Status nicht aus, da ich meinen eigenen Spaltennamen angeben muss, um den FK zu speichern, der auf den PK in der Tabelle der Esel zeigt.

Also, das obige fehlt die Zuordnung (und es kompiliert nicht, wenn ich es einfach hinzufügen). Gibt es einen Weg, um es zu umgehen, ohne tatsächlich die Definition von Donkey Klasse zu ändern?

+2

Rufen Sie einfach eine andere Überladung ohne Parameter - 'WithMany()' – 2kay

+0

@ 2kay So einfach? Ist es ein empfohlener Weg? Wird es Drachen geben? Irgendwelche Hinweise werden geschätzt. –

+0

Laut Dokumentation, ja. Benutzte es in prod, noch nie gesehen Drachen) – 2kay

Antwort

1
modelBuilder.Entity<Monkey>() 
      .HasRequired(x => x.Donkey) 
      .WithMany(); 
+0

Interessant. Ich wusste nicht, dass es eine solche Überlastung gab. Kann ich jetzt, um einer benutzerdefinierten Spalte mit Namen zuzuordnen, einfach * MapKey * verwenden, wie ich es in meiner Frage gezeigt habe, oder gibt es noch andere Probleme, die beim Aufrufen einer anderen Methode auftreten könnten? –

+0

Sie können eine weitere Überladung wie '.Map (x => x.MapKey (" DonkeyId ")) hinzufügen;' oder wenn Sie der Klasse 'Monkey' eine weitere Spalte hinzufügen, können Sie' .HasForeignKey (x => x.DonkeyId) " – SteppingRazor

+0

Übrigens, das war eine großartige Antwort, also seid ihr mehr als willkommen, ihm einen ebenso großartigen Schlag zu geben (http://stackoverflow.com/questions/36521800/how-to- deklarieren-ein-zu-viel-in-fließend-api-so-das-es-ist-nicht-erforderlich. Es ist wahrscheinlich noch einfacher. –