.NET 6 ha introdotto il nuovo tipo DateOnly che permette di gestire una data senza l'aggiunta dell'orario. Purtroppo, il provider di EF Core 6 per Sql Server non introduce un supporto nativo al tipo DateOnly, sebbene Sql Server permetta di creare colonna di tipo Date (l'equivalente Sql di DateOnly). Se proviamo a mappare un campo Date su una proprietà di tipo DateOnly, EF Core 6 solleva con un eccezione che ci notifica che DateOnly è un tipo non gestito. Tuttavia, una colonna di tipo Date di Sql Server può essere mappata su una proprietà di tipo DateTime e possiamo sfruttare questa capacità del provider per usare il tipo DateOnly tramite un value converter custom.
Poiché EF Core supporta il tipo DateTime, tutto quello che dobbiamo fare è creare un converter che sia in grado di convertire il nostro DateOnly in un DateTime e viceversa.
public class DateOnlyConverter : ValueConverter<DateOnly, DateTime>
{
public DateOnlyConverter(): base(
(DateOnly d) => d.ToDateTime(TimeOnly.MinValue),
(DateTime d) => DateOnly.FromDateTime(d), null)
{
}
}Questo converter è sfruttato in due fasi dalla pipeline di EF Core. La prima è quando si deve tradurre la query in SQL. In questa fase viene chiamata la prima funzione passata in input al costruttore. Questa converte un oggetto DateOnly in un oggeto DateTime che il provider di EF Core riconosce e quindi può tradurre in SQL per eseguire una query su un campo Date. La seconda fase è quando si devono materializzare gli oggetti con i dati recuperati dal database. In questa fase viene invocato il secondo metodo che accetta un oggetto di tipo DateTime e lo trasforma in un oggetto di tipo DateOnly.
Ora non ci rimane che configurare il converter all'interno del contesto di EF Core.
public class MyDbContext : DbContext
{
...
protected override void ConfigureConventions(ModelConfigurationBuilder builder)
{
builder.Properties<DateOnly>().HaveConversion<DateOnlyConverter>();
}
}Grazie al nuovo metodo ConfigureConventions, possiamo applicare il converter a tutte le proprietà di tipo DateOnly in un punto solo, semplificando notevolmente 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
Integrare modelli AI in un workflow di GitHub
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
.NET Aspire per applicazioni distribuite
Utilizzare i command service nei test con .NET Aspire
Utilizzare Locust con Azure Load Testing
Recuperare le subissue e il loro stato di completamento in GitHub
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Ciclo di vita risorse con .NET Aspire
Esporre workflow come server MCP con Azure Logic Apps
Semplificare la gestione dei modelli con Azure AI Foundry Model Router
Esporre un server MCP esistente con Azure API Management
I più letti di oggi
- Il valore degli agenti AI cresce davvero quando possono interagire in modo sicuro con dati, servizi e backend aziendali. In questa sessione parleremo di Model Context Protocol e di come usarlo nell'ecosistema Azure per trasformare i servizi che già utilizziamo in tool pronti per scenari agentici reali. Un appuntamento utile per chi vuole capire come rendere la propria architettura agent-ready, con il giusto equilibrio tra integrazione, governance e sicurezza. Ci vediamo a Milano al Global Azure 2026 - ASPItalia.com, con Cristian Civera. #GlobalAzure #Azure #MCP #AI #AIAgents https://aspit.co/globalazure-26
- Global Azure 2026 - ASPItalia.com - Milano
- Abbiamo aperto la Call for Papers per il Future Dev Day di ASPItalia.com, in programma a Milano il 27 maggio 2026. L'evento sarà dedicato al futuro dello sviluppo software, tra AI, agenti intelligenti e tecnologie emergenti. Se hai un'idea, un'esperienza concreta o un progetto interessante da condividere, ci farà piacere ricevere la tua proposta. #FutureDevDay #CallForPapers #CFP #AI #SoftwareDevelopment #ASPItalia #Milano https://aspit.co/futuredev-26




