Questa domanda proviene da una frustrazione quando si utilizza Entity Framework e ASP.NET MVC, ma presumo che si tratti di una frustrazione generale su più framework e linguaggi.
Diciamo che abbiamo un oggetto chiamato Invoice
. La fattura ha un Recipient
. Nel mio modello a oggetti l'ho impostato in questo modo:
[ForeignKey("Debtor")]
public int RecipientId { get; set; }
public virtual Recipient Recipient { get; set; }
In .NET, e presumibilmente anche in altri framework, ciò significa che quando ho un oggetto Invoice, posso scaricare i dati del destinatario.
Se salvi l'oggetto della fattura, salverà anche l'oggetto destinatario nel database del destinatario. Questo è in alcuni casi molto buono, ma ...
Questo è il mio problema
Ho anche un RecipientService
. Qui ho una logica aziendale prima di memorizzare un destinatario. Imposterò una data di creazione, verificherò che alcuni campi siano corretti e imposti altri valori. Quando chiamo il mio metodo Create
sul mio RecipientService
, funziona perfettamente.
Ma ovviamente, questo codice viene completamente ignorato quando salvi la mia fattura nel database quando utilizzo ORM Entity Framework.
La mia domanda
Qual è l'approccio più comune per risolvere questo problema?
Semplicemente non consentire il salvataggio di oggetti con un oggetto reale come una proprietà e salvarlo semplicemente con il riferimento ID?
Nel mio InvoiceService
potrei facilmente dire qualcosa del tipo:
Recipient newRecipient = _recipientService.Create(recipient);
invoice.Recipient = null;
invoice.RecipientId = newRecipient.Id;
Ma questo è davvero l'approccio migliore e più comune?
Spero che qualcuno possa dare una mano qui: -)