Per prima cosa ho il mio codice, i modelli di dati SQL (usando EF Core 1.1) che sono usati per modellare il mio schema / tabelle. Tuttavia, ho anche oggetti di dominio che sono versioni parziali o complete di questi modelli di dati SQL, in sostanza hanno la stessa forma dei modelli di dati SQL.
Ora vorrei sapere qual è il modo migliore per gestire gli aggiornamenti a cascata quando si modificano oggetti complessi al di fuori del contesto del suo contesto tracciato. Se consideri che tutte le operazioni del mio dominio non si svolgono sull'entità tracciata, avvengono sull'oggetto dominio.
In breve, questo è quello che sto cercando di ottenere.
1) Leggi entità dal database.
2) Mappare l'entità all'oggetto dominio.
3) Applica aggiornamenti all'oggetto dominio.
4) Mappare l'oggetto dominio all'entità.
5) Applicare l'aggiornamento del database sull'entità mappata che determina l'aggiornamento dell'entità e delle relative entità associate.
Tra l'altro le entità e l'oggetto dominio hanno le tipiche relazioni da molti a uno in cui si potrebbe incorrere. Qual è il modo migliore per farlo?
Qual è il modo migliore per farlo?
Penso che il modo migliore per risolvere questo problema è evitare il problema, in primo luogo, utilizzando un framework sufficientemente flessibile per consentire il mapping degli oggetti del dominio direttamente al database senza troppi compromessi per evitare di dover modellare una persistenza esplicita modello nel codice.
in sostanza hanno la stessa forma dei modelli di dati SQL
Se ci pensate significa che avreste la stessa mancata corrispondenza tra il vostro modello di dominio (modello di oggetti) e il modello di DB relazionale che tra il vostro modello di dominio e il modello di persistenza esplicita.
Tuttavia, esiste un modo elegante per eseguire la mappatura che Vaughn Vernon descrive in Aggregati di modellazione con DDD e Entity Framework . Fondamentalmente, si riduce allo stato di memorizzazione in oggetti di stato espliciti che sono insiemi di getter / setter che sono incapsulati e gestiti da oggetti di dominio reale. Questi oggetti di stato vengono quindi mappati con EF.
Ad esempio tratto dall'articolo collegato sopra
public class Product {
public Product(
TenantId tenantId,
ProductId productId,
ProductOwnerId productOwnerId,
string name,
string description) {
State = new ProductState();
State.ProductKey = tenantId.Id + ":" + productId.Id;
State.ProductOwnerId = productOwnerId;
State.Name = name;
State.Description = description;
State.BacklogItems = new List<ProductBacklogItemState>();
}
internal Product(ProductState state) {
State = state;
}
...
}