Nello script #489 abiamo visto come utilizzare il lazy loading di Entity Framework tramite l'interfaccia ILazyLoader. Come detto, questa tecnica ci fa scrivere più codice rispetto all'utilizo dei proxy (il che non è necessariamente un male in quanto ci da il pieno controllo sul trigger del laz loading), ma soprattutto lega il nostro modello a Entity Framework e questo puà risultare un problema in alcuni casi.
Per ovviare a questo problema, possiamo iniettare una Action al posto dell'interfaccia ILazyoader; questa action rappresenta la chiamata al metodo Load dell'interfaccia ILazyLoader.
public class Order
{
private ICollection<Detail> _details;
public Order()
{
}
private Order(Action<object, string> lazyLoader)
{
LazyLoader = lazyLoader;
}
private Action<object, string> LazyLoader { get; set; }
public int Id { get; set; }
public DateTime Date { get; set; }
public ICollection<Order> Orders
{
get => LazyLoader.Load(this, ref _orders);
set => _orders = value;
}
}
public class Detail
{
private Order _order;
public Detail()
{
}
private Detail(Action<object, string> lazyLoader)
{
LazyLoader = lazyLoader;
}
private Action<object, string> LazyLoader { get; set; }
public int Id { get; set; }
public string Quantity { get; set; }
public string UnitCost { get; set; }
public Order Order
{
get => LazyLoader.Load(this, ref _order);
set => _order = value;
}
}
public static class PocoLoadingExtensions
{
public static T Load<T>(this Action<object, string> loader,
object entity, ref T navigationField,
[CallerMemberName] string navigationName = null)
where T : class
{
loader?.Invoke(entity, navigationName);
return navigationField;
}
}Come si evince dal codice, la action prende il posto dell'interfaccia e viene invocata nel getter delle navigation property rendendo il codice molto simile a quello utilizzato con ILazyLoader. Tuttavia la classe Action non ha un metodo Load; questo è un extension method che si occupa di recuperare il nome della navigation property e di invocare la action tornandone il risultato così da rendere meno ripetitivo il codice.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Blazor e Static Web Assets in .NET 10
Raggruppare risorse in .NET Aspire
Mischiare codice server side e client side in una query LINQ con Entity Framework
Utilizzare Locust con Azure Load Testing
Utilizzo di CSS Scroll Snap per realizzare un carousel
Keynote .NET Conference Italia 2025
Pubblicare un MCP Server in GitHub MCP Registry
Ciclo di vita risorse con .NET Aspire
Utilizzare il top layer in HTML
Utilizzare il Null conditional assignment di C# 14
Integrare LLM alle nostre applicazioni in .NET con MCP
Nuova modale riconnessione Blazor
I più letti di oggi
- Future Dev Day - Milano
- Global Azure 2026 - ASPItalia.com - Milano
- Gli agenti AI sono uno dei temi più interessanti del momento, ma costruirli bene richiede molto più di un semplice prompt. In questa sessione parleremo di Azure AI Foundry con un taglio concreto, utile per capire come progettare agenti AI enterprise-grade, integrarli con tool e memoria, monitorarli e gestirne il deployment in modo efficace. Ci vediamo a Milano al Global Azure 2026 - ASPItalia.com, con Stefano Demiliani. #GlobalAzure #Azure #AzureAIFoundry #AI #AIAgents https://aspit.co/globalazure-26
- Esporre workflow come server MCP con Azure Logic Apps
- Global Azure Milan 2020 - Online
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js
- Azure AI Foundry: la piattaforma per i tuoi agenti intelligenti
- Chiedilo ai tuoi dati: Fabric Data Agents in azione
- Keynote The Agentic Day 2025
- Response streaming con Blazor e .NET 10




