J'ai une entité avec des centaines de propriétés. Bien qu'il soit bon dans la base de données, dans les classes, il est peu pratique. La question qui se pose est de savoir comment regrouper certaines propriétés de la classe dans d’autres classes afin de faciliter la programmation tout en ne conservant qu’une seule table.
Exemple de pseudocode:
class Work {
WorkVolumes WorkVolumes;
...
SomeOtherGroupOfProperties SomeOtherGroup;
}
class WorkVolumes {
float VolumeOfWorkType1;
float VolumeOfWorkType2;
...
float VolumeEtc;
}
class SomeOtherGroupOfProperties {
int SomeOtherProperty;
...
}
Dans la base de données, il n’existe qu’une table Utiliser les colonnes VolumeOfWorkType1, VolumeOfWorkType2, VolumeEtc, SomeOtherProperty, ...
voir "Fractionnement automatique de table pour les types d'entité possédée" ici: https://blogs.msdn.microsoft.com/dotnet/2017/06/28/announcing-ef-core-2-0-preview-2/
pour le modèle suivant, une seule table est créée:
modelBuilder.Entity<Order>().OwnsOne( p => p.OrderDetails, cb => { cb.OwnsOne(c => c.BillingAddress); cb.OwnsOne(c => c.ShippingAddress); }); public class Order { public int Id { get; set; } public OrderDetails OrderDetails { get; set; } } public class OrderDetails { public StreetAddress BillingAddress { get; set; } public StreetAddress ShippingAddress { get; set; } } public class StreetAddress { public string Street { get; set; } public string City { get; set; } }