Ho fatto delle ricerche sul mio problema, ma in qualche modo non capisco.
Ho 4 classi con entità collegate in un modo 1: n:
public class ContentProtectionProject
{
[Required]
public int Id { get; set; }
...
[Required]
public List<UrlToProtect> UrlsToProtect { get; set; }
[Required]
public int AccountId { get; set; }
[ForeignKey("AccountId")]
public Account Account { get; set; }
}
public class UrlToProtect
{
[Required]
public int Id { get; set; }
...
[Required]
public List<UrlTextContent> UrlsTextContent { get; set; }
[Required]
public int ContentProtectionProjectId { get; set; }
[ForeignKey("ContentProtectionProjectId")]
public ContentProtectionProject ContentProtectionProject { get; set; }
}
public class UrlTextContent
{
[Required]
public int Id { get; set; }
...
[Required]
public List<UrlTextSnippet> UrlTextSnippets { get; set; }
[Required]
public int UrlToProtectId { get; set; }
[ForeignKey("UrlToProtectId")]
public UrlToProtect UrlToProtect { get; set; }
}
public class UrlTextSnippet
{
[Required]
public int Id { get; set; }
...
[Required]
public int UrlTextContentId { get; set; }
[ForeignKey("UrlTextContentId")]
public UrlTextContent UrlTextContent { get; set; }
}
Mi piace ottenere tutti i dati per un progetto, che cerco di ottenere in questo modo da projectId da un repository:
public async Task<ContentProtectionProject> GetContentProtectionProject(int contentprotectionProjectId)
{
var contentProtectionProject = await _context.ContentProtectionProjects
.Include(x => x.UrlsToProtect)
.ThenInclude(u => u.UrlsTextContent)
.FirstOrDefaultAsync(x => x.Id == contentprotectionProjectId);
return contentProtectionProject;
}
Sono in grado di andare solo al livello di "UrlTextContent", ma in qualche modo non sono in grado di includere "UrlTextSnippet".
Il mio obiettivo è caricare un "Progetto" completo per poter eseguire alcune elaborazioni sulle voci dell'elenco delle entità collegate.
Alla fine voglio trovare tutti i "UrlTextContent" per i quali non sono disponibili "UrlTextSnippets" tramite iterazione sulle entità collegate.
Utilizzo .NET Core 2.1.403 con Entity Framework Core .NET 2.1.4-rtm-31024
Qualsiasi aiuto è molto apprezzato.
I migliori saluti
Modificare:
Classe di contesto:
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base (options) {}
...
public DbSet<ContentProtectionProject> ContentProtectionProjects { get; set; }
public DbSet<UrlToProtect> UrlToProtects { get; set; }
public DbSet<UrlTextContent> UrlTextContents { get; set; }
public DbSet<UrlTextSnippet> UrlTextSnippets { get; set; }
}
Modifica 2: schermata di debug
L'elenco "UrlTextSnippet" è nullo, sebbene sia disponibile una voce.
Odio quelle persone che dicono che puoi fare qualcosa che non sei in grado di fare, così mi dispiace in anticipo. Secondo la Documentazione dovresti essere in grado di concatenare quelli. ThenInclude () o .Include () . Spero che questi ti portino sulla buona strada.
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ThenInclude(author => author.Photo)
.Include(blog => blog.Owner)
.ThenInclude(owner => owner.Photo)
.ToList();
}
C'è anche questo, ma cerco di evitare di selezionare se posso.
Inoltre potresti incontrare questo problema e potresti riuscire a farlo ma IntelliSense potrebbe portarti fuori strada.
Nota: le versioni correnti di Visual Studio offrono opzioni di completamento del codice errate e possono causare la segnalazione di espressioni corrette con errori di sintassi quando si utilizza il metodo ThenInclude dopo una proprietà di navigazione della raccolta. Questo è un sintomo di un bug IntelliSense tracciato su https://github.com/dotnet/roslyn/issues/8237 . È possibile ignorare questi errori di sintassi spuri purché il codice sia corretto e possa essere compilato correttamente.