2011-01-27 14 views
7

Sto provando a creare il mio modello in Entity Framework e sto provando a farlo usando l'opzione first-code.Entity framework code first class relations

Attualmente ho 3 tabelle nel mio database. La mia tabella di stato ha tutti gli stati utilizzati nell'applicazione web. Ho un tavolo delle notizie. E ho una tabella di stato delle notizie. Il motivo per cui l'ho fatto è perché non voglio che tutti gli stati siano disponibili per le notizie, solo un paio di loro. Così i miei 3 tavoli sarà simile a questo:

Notizie Tabella:

NewsId int required primary key 
Title varchar required 
Body varchar required 
NewsStatusId int required foreign key 

nuovoStato Tabella:

NewsStatusId int required primary key 
StatusId int required foreign key 

Tabella Stato

StatusId int required primary key 
Name varchar required 

Quando si creano le classi di questo, do Devo creare classi per News, Status e NewsStatus? Stavo pensando solo a Notizie e Status? Come sarebbero le mie relazioni tra le 2/3?

mie notizie classe assomiglia a questo

public class News 
{ 
    public int NewsId { get; set; } 
    // rest of my properties 
    public int StatusId { get; set; } 
} 

classe Stato:

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 
} 

cosa sarebbe queste classi simile con le relazioni tra le classi 2/3?

Qualsiasi campione di codice sarebbe apprezzato.

risposta

6

Non avete davvero bisogno di API fluente per una relazione molti-a-molti di base tra notizie e Stato. Tutto sarà dedotto dal codice prima base sulle convenzioni. Detto questo, possiamo personalizzare il tuo schema DB con API fluenti in base alle tue esigenze.

public class News 
{ 
    public int NewsId { get; set; } 
    public string Title { get; set; } 

    public ICollection<Status> Statuses { get; set; } 
} 

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 

    public ICollection<News> Newses { get; set; } 
} 

public class Ctp5Context : DbContext 
{ 
    public DbSet<News> Newses { get; set; } 
    public DbSet<Status> Statuses { get; set; } 
} 

Si prega di notare che in una relazione molti a molti associazione in questo modo, non ci sta per essere un NewsStatusId come chiave esterna su Class News, invece, una chiave esterna NewSID sarà compare sul tavolo link che fa riferimento al PK sulla tabella News. Se hai davvero bisogno di un NewsStatusId nella classe News, allora dobbiamo interrompere questa associazione a 2 un'associazione uno-a-molti, il che significa che abbiamo 3 entità e non 2.

+0

Grazie. Ho ancora bisogno della tabella NewsStatus? Non so come viene eseguito il collegamento dalla tabella NewsStatus alle tabelle Stato e Notizie? O sto sbagliando tutto qui? Come sarebbe allora la struttura del tavolo? –

+1

Sì, ne hai bisogno, ma sarà automaticamente creato e gestito da EF. Il tuo modello logico non ha un'entità come NewsStatus. La tabella di join in una relazione Molti a Molti conterrà * solo * chiavi esterne dalla fine della relazione (ad es.Tabelle Status e News) o devi ridurla a 2 da una a molte associazioni, quindi introdurre una nuova Entità come NewsStatus per contenere le chiavi esterne e qualsiasi altra proprietà richiesta. Il codice che ho mostrato nella mia risposta va con la prima. Fammi sapere se hai bisogno di farlo nel secondo modo e ti mostrerò come è fatto. –

+0

Nel mio modello a oggetti, qual è la relazione tra Notizie e Stato? Da 1 a M? Hai qualche codice su come implementarlo completamente? Non ho ancora utilizzato le prime assemblee in codice EF, ci sono tutorial decenti. Anche l'esempio di codice di Craig qui sotto è nuovo per me. –

1

Solo News e Status. Faresti scrivere qualcosa di simile:

modelBuilder.Entity<News>() 
    .HasMany(n => n.Statuses) 
    .WithMany(s => s.News); 

(Regolare pluralizations a proprio piacimento.)

+0

Che cos'è modelBuilder e dove dovrei mettere vero? Vedi il mio post aggiornato. Grazie. –

+0

Ancora non capisco come questo codice collegherà i miei 3 tavoli? Hai qualche codice in più per me o link per andare a leggere sul tuo codice? –

Problemi correlati