Per default, EF Core mappa le proprietà di un owned type nella stassa tabella su cui è mappata la classe che contiene l'owned type. Prendiamo il seguente modello che prevede una classe Order e un Owned Type AddressInfo.
public class AddressInfo { public string Address { get; set; } } public class Order { public int Id { get; set; } public ShippingAddress Address { get; set; } public BillingAddress Address { get; set; } }
In questo caso, EF Core si aspetta una tabella Order con i campi Id, ShippingAddress_Address e BillingAddress_Address. Tuttavia possiamo modificare il mapping di default per salvare i dati degli indirizzi in una tabella esterna a quella dell'ordine utilizzando il metodo ToTable subito dopo aver invocato il metodo OwnsOne.
modelBuilder.Entity<Order>().OwnsOne(p => p.BillingAddress).ToTable("OrderAddress"); modelBuilder.Entity<Order>().OwnsOne(p => p.ShippingAddress).ToTable("OrderAddress");
Va sempre ricordato che i dati di un owned type vengono sempre recuperati insieme all'entity principale anche se si trovano in una tabella esterna. Questo significa che quando recuperiamo l'ordine, viene sempre fatta una join verso la tabella degli indirizzi senza necessità di usare il metodo Include.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Inizializzare i container in Azure Container Apps
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Eseguire una GroupBy per entity in Entity Framework
Reactive form tipizzati con modellazione del FormBuilder in Angular
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Creare moduli CSS in React
Evitare la command injection in un workflow di GitHub
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
C# 12: Cosa c'è di nuovo e interessante
Le novità di Angular: i miglioramenti alla CLI
Installare le Web App site extension tramite una pipeline di Azure DevOps