Sono un po 'un newb EF e sto usando .net core e non riesco a caricare le entità correlate di un'entità a meno che non esegua un'istruzione linq "from..in..join" a tutti gli effetti .
Le mie entità hanno le chiavi principali di Guid e sto utilizzando SQL Server come DB.
Diamo un'occhiata a un'entità con cui ho problemi.
[Table("User")]
public class User : AuditableEntity
{
public Group CurrentlySelectedGroup { get; set; }
}
[Table("Group")]
public class Group : AuditableEntity
{
public string Name { get; set; }
}
Un utente può selezionare un gruppo come gruppo "selezionato". Ho eseguito la dichiarazione di migrazione e abbastanza sicuro ha creato esattamente quello che volevo sul DB: una colonna nuova di zecca denominata CurrentlySelectedGroupId che era un FK per la colonna PK della tabella di gruppo.
Quindi sembra fantastico.
Ho quindi eseguito un codice che ha aggiunto una guida valida per un gruppo valido nella tabella.
Ora quando eseguo questa riga di codice:
var user = _dbContext.Users.Where(u => u.Id == userId).FirstOrDefault();
Restituisce il mio utente perfettamente, ma tutte le entità correlate sono nulle. Ho anche provato cose come .Include (), incluso 'virtuale', ma senza fortuna.
Qualche idea su cosa sto facendo male?
Grazie!
Il caricamento lento non è abilitato, questa funzione è stata inclusa in EF Core 2.1. Nel tuo caso è in corso il caricamento esplicito, quindi devi caricare esplicitamente le entità correlate. Quindi, se si utilizza EF Core 2.1, è sufficiente abilitare il caricamento lento e utilizzare le entità correlate senza aggiungerle esplicitamente.
Dopo molte prove ed errori, sembra che i seguenti lavori:
var user = _dbContext.Users.Single(u => u.Id == userId);
_dbContext.Entry(user).Reference(u => u.CurrentlySelectedGroup).Load();
Qualche idea sul perché questo funzionerebbe e non qualcos'altro?
Grazie