Domanda

Sto creando nuovi modelli che lascerò EF generare il database per. Modelli aspetto:

public class Model
{
    public int Id { get; set; }
    public string StyleNumber { get; set; }
    public virtual IList<Metal> Metals { get; set; }
    public virtual IList<ModelImage> Images { get; set; }
}

public class Metal
{
    public int Id { get; set; }
    public string Description { get; set; }
}

vorrei metallo da una tabella di riferimento w / le due colonne, il campo "Descrizione" essere unico. Invece, EF crea la tabella in metallo con una colonna aggiuntiva che fa riferimento al modello Id. C'è un modo semplice per modificare il comportamento, tramite annotazioni di dati o l'API fluido?

È stato utile?

Soluzione

EF pensa che tu stai avendo una relazione uno-a-molti tra Modello e metallo e il modo più semplice per modello che è memorizzando il Modello ID nella tabella metallo. Se si desidera conservare (vale a dire non ci sono dati rapporto) 'pulito' il tavolo di metallo, allora i dati di rapporto devono essere conservati in un tavolo separato, ma così facendo si sta implicitamente anche cambiando il rapporto tra modello metalli. Se davvero si vuole andare fino in fondo, di quanto si può dire EF che si desidera un senso unico-molti-a-molti tra Modello metalli. Potete farlo in questo modo all'interno la funzione OnModelCreating del DbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}

Altri suggerimenti

La risposta di Steven K è corretta per la rimozione della voce di chiave esterna sul tavolo di metallo, tuttavia non applicherà requisito unico per il campo Desctiption. Che non è colpa sua, però, perché, purtroppo, EF Codice Prima non ha un'annotazione vincolo univoco ancora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top