8

Ich habe folgendes ModellWie eine Eins-zu-viele-Beziehung in EF konfigurieren

public class PageConfig : Base 
{ 
    // Properties Etc.. 

    public ICollection<Image> ScrollerImages { get; set; } 
} 

Mein Ansatz ist zu binden, um eine Verknüpfungstabelle mit {PageConfigID, ImageID}.

In meinem Modell Binder habe ich versucht, die folgenden ..

modelBuilder.Entity<PageConfig>() 
    .HasMany(x => x.ScrollerImages) 
    .WithMany() 
    .Map(x => 
    { 
     x.ToTable("junc_PageConfigScrollerImages"); 
     x.MapLeftKey("PageConfigID"); 
     x.MapRightKey("ImageID"); 
    }); 

, die in einer Null-Sammlung von Bildern führen.

Wie kann ich diese Bilder an das PageConfig-Modell binden?

EDIT

Der größte Teil des Problems war es, Benutzerfehler zurückzuführen. jic das passiert Ihnen ..

Überprüfen Sie, dass die wichtigsten Einschränkungen in der Datenbank korrekt festgelegt sind.
Die ICollection auf dem Modell muss virtuell sein.

+1

, das wie Entity Framework aussieht , nicht MVC –

+0

Sie sind richtig, mein Fehler – opdb

Antwort

3

Wenn Sie eine Eins-zu-viele-Beziehung zwischen diesen beiden Entitäten Ihr Modell so sein würde erstellen möchten:

public class PageConfig 
{ 
    public int Id {get;set;} 

    //navigation property 
    public ICollection<Image> ScrollerImages {get;set;} 
} 

public class Image 
{ 
    public int Id {get;set;} 

    //FK 
    public int? PageConfigId {get;set;} 

    //navigation property 
    public PageConfig PageConfig {get;set;} 
} 

Und die Fluent Api Konfiguration wäre:

modelBuilder.Entity<Image>() 
      .HasOptional(i=>i.PageConfig) 
      .WithMany(pc=>pc.ScrollerImages) 
      .HasForeignKey(i=> i.PageConfigId); 

Wenn Sie Idee ein unidirektional eingeschaltet ist erstellen e-to-many-Beziehung dann die FK löschen und die Navigationseigenschaft auf Image Einheit und konfigurieren Sie die Beziehung auf diese Weise:

modelBuilder.Entity<PageConfig>() 
      .HasMany(pc => pc.ScrollerImages) 
      .WithOptional(); 

prüfen diese link für weitere Informationen über diese Art von Beziehung

+0

unidirektionale Eins-zu-viele-Beziehung ist das, wonach ich bin. HasOptional scheint keinen Konstruktor zu haben, ich bin mir nicht sicher, was ich dort machen soll. – opdb

+0

Ich dachte, es könnte in irgendeiner Reihenfolge sein, ich habe das Stück Code geändert, überprüfen Sie jetzt – octavioccl

+0

Es stellte sich heraus, es gab mehr Probleme unter der Oberfläche, aber alles läuft jetzt glatt. Da Ihre Antwort die häufigsten Szenarien behandelt, ist sie korrekt. Vielen Dank. – opdb

0

Per http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx:

"... können Sie Fluent API verwenden, eine One-to-Many Beziehung zu konfigurieren, indem Klassen Schüler Einheit wie unten gezeigt."

"... Verwenden Sie die HasOptional-Methode anstelle der HasRequired-Methode, um die Spalte für den Fremdschlüssel nullbar zu machen."

So würde man für so etwas suchen:

modelBuilder.Entity<Image>() 
      .HasOptional<PageConfig>(x => x.PageConfig) 
      .WithMany(x => x.ScrollerImages) 
      .HasForeignKey(x => x.PageConfigId) 
+0

Image weiß nichts über PageConfig, so bin ich mir nicht sicher, wie Sie Ihr Beispiel verwenden. Ein einzelnes Bild kann von vielen PageConfig verwendet werden, und ein Bild muss in keiner Weise über PageConfig Bescheid wissen. – opdb