Lazy loading in .NET core
Lazy loading in .NET core
.NET core is de platformonafhankelijke .NET-implementatie van Microsoft. .NET-core-applicatie kunnen bijvoorbeeld worden geactiveerd op Linux-omgevingen, waarvan mogelijke effecten zijn: lagere hostingkosten en vergroten van schaalbaarheid oplossing.
Er zijn echter een aantal belangrijk verschillen, bijvoorbeeld in de structuur van de gegenereerde projecten, of de NuGet-packages die ondersteund worden.
Een van de andere verschillen tussen .NET Framework en .NET Core is dat het laden van gekoppelde database-entiteiten via lazy loading nog niet ondersteund wordt in .NET core. Een voorbeeld van gekoppelde entiteiten is:
public class BlogPost{
public virtual ICollection<Comment> Comments {get; set;}
}
Wanneer in .NET Framework een databasecontext geopend is, kan vanuit een blogpost worden naar comments op volgende wijze:
Var blogPost = _context.blogPosts.Find(Id);
Var comments = blogPost.Comments;
Comments bevat nu een collectie met gekoppeld comments. In het geval van .NET Core is comments echter nog steeds null en dat is omdat lazy loading nog niet wordt ondersteund. Om de gekoppelde comments in te laden en te gebruiken, zijn er twee oplossingen:
Via Eager Loading:
var blogPost = _context.blogPosts.Include("Comments").Single(b => b.Id == Id);
Via Explicit Loading:
context.Entry(blogPost).Collection(b => b.Comments).Load();
Of als de koppeling naar een enkele entity is:
context.Entry(blogPost).Reference(b => b.Author).Load();
Op deze manier zorg je ervoor dat gekoppelde entiteiten ingeladen worden en gebruikt kunnen worden in je .NET Core-applicatie.