8

Ho il seguente modelloCome configurare una relazione uno-a-molti in EF

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

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

Il mio approccio è quello di legare utilizzando una tabella di incrocio {PageConfigID, ImageID}.

Nel mio modello legante ho provato la seguente ..

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

che si traduce in una raccolta di immagini nulla.

Come posso associare queste immagini al modello PageConfig?

EDIT

La maggior parte del problema è dovuto a un errore dell'utente. jic questo capita a voi ..

Verificare che i vincoli di chiave nel database siano impostati correttamente.
L'ICollection sul modello HA BISOGNO di essere virtuale.

+1

Che assomiglia a Entity Framework , non MVC –

+0

Sei corretto, errore mio – opdb

risposta

3

Se si desidera creare una relazione uno-a-molti tra queste due entità vostro modello sarebbe stato così:

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

E la configurazione Api Fluent sarebbe:

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

Se idea è creare un unidirezionale su e-a-molti quindi eliminare il FK e la proprietà di navigazione su Image entità e configurare il rapporto in questo modo:

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

Scegli questa link per maggiori informazioni su questo tipo di rapporto

+0

unidirezionale rapporto uno-a-molti è quello che sto dopo. HasOptional non sembra avere un costruttore senza argomenti, non sono sicuro di cosa fare lì. – opdb

+0

Ho pensato che potrebbe essere in qualsiasi ordine, ho cambiato quel pezzo di codice, controlla ora – octavioccl

+0

Si scopre che c'erano più problemi sotto la superficie, ma ora tutto sta andando liscio. Poiché la tua risposta copre gli scenari comuni, è corretta. Grazie. – opdb

0

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

"... è possibile utilizzare API Fluent per configurare un uno-a-molti con le classi di entità Student come illustrato di seguito."

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      //one-to-many 
      modelBuilder.Entity<Student>() 
         .HasRequired<Standard>(s => s.Standard) 
         .WithMany(s => s.Students) 
         .HasForeignKey(s => s.StdId); 

    } 

"... Utilizzare il metodo HasOptional anziché il metodo HasRequired per rendere nullable la colonna chiave esterna."

così si potrebbe essere alla ricerca di qualcosa di simile:

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

L'immagine non sa nulla di PageConfig, quindi non sono sicuro di come utilizzare il tuo esempio. Una singola immagine può essere utilizzata da molti PageConfig e un'immagine non ha bisogno di sapere su PageConfig in alcun modo. – opdb

Problemi correlati