Relazioni molti-a-molti in EF7 - Selezionare la query per un elenco inclusi i dati correlati

asp.net-core asp.net-core-mvc c# entity-framework entity-framework-core

Domanda

Sto creando un blog con la seguente relazione Many-to-Many sul contenuto -> tabelle delle categorie. Ho usato il seguente codice per generare le tabelle in EF7:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

Tuttavia, quando provo a caricare un elenco di categorie, incluso il contenuto associato a una query EF7 come segue, viene visualizzato un errore.

categories = await _db.Categories
                      .Include(c => c.Categorization)
                      .ThenInclude(c => c.Content)
                      .OrderByDescending(c => c.Categorization.Count)
                      .ToListAsync();

Questa è la pagina di errore che ricevo quando viene chiamato.

Un'operazione di database non è riuscita durante l'elaborazione della richiesta.

AggregateException: si sono verificati uno o più errori. AggregateException: si sono verificati uno o più errori. AggregateException: si sono verificati uno o più errori. AggregateException: si sono verificati uno o più errori. SqlException: nome della colonna non valido "Id". Ci sono modifiche al modello in sospeso per ApplicationDbContext Scaffold una nuova migrazione per queste modifiche e applicarle al database dalla riga di comando:

dnx ef migrations add [migration name] 
dnx ef database update

Nota interessante: quando rimuovo la linea

 .Include(c => c.Categorization).ThenInclude(c => c.Content)

A volte funziona correttamente, come nel caricare la categorizzazione, tuttavia questo non succede SEMPRE, a volte la categorizzazione non viene caricata e ho solo riferimenti null per la categorizzazione in ogni classe di categoria nella enumerabile generata.

Risposta popolare

Il messaggio di errore dice tutto. SqlException: nome colonna non valido "Id"

Il tuo database è diverso dai modelli del tuo progetto. Se hai abilitato la migrazione del database, esegui i comandi

dnx ef migrations add [migration name] 
dnx ef database update

Se non si desidera utilizzare la migrazione del database, è necessario aggiornare i modelli sul database in modo che corrispondano ai modelli.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché