Ho una gerarchia di oggetti piuttosto profonda che sto cercando di mantenere con Entity Framework 4, POCO, PI (Persistence Ignorance) e Code First. All'improvviso le cose hanno iniziato a funzionare abbastanza bene quando mi sono reso conto di non usare l'operatore new(). Come originariamente scritto, gli oggetti usano frequentemente new() per creare oggetti figlio.Entity Framework 4 Code First e il nuovo() Operator
Invece sto usando il mio Take sul modello di repository per creare tutti gli oggetti figlio secondo necessità. Ad esempio, dato:
class Adam
{
List<Child> children;
void AddChildGivenInput(string input) { children.Add(new Child(...)); }
}
class Child
{
List<GrandChild> grandchildren;
void AddGrandChildGivenInput(string input) { grandchildren.Add(new GrandChild(...)); }
}
class GrandChild
{
}
("GivenInput" implica una certa elaborazione non mostrato qui)
definisco un AdamRepository
come:
class AdamRepository
{
Adam Add()
{
return objectContext.Create<Adam>();
}
Child AddChildGivenInput(Adam adam, string input)
{
return adam.children.Add(new Child(...));
}
GrandChild AddGrandchildGivenInput(Child child, string input)
{
return child.grandchildren.Add(new GrandChild(...));
}
}
Ora, questo funziona abbastanza bene. Tuttavia, non sono più "ignorante" del mio meccanismo di persistenza poiché ho abbandonato l'operatore new().
Inoltre, sono a rischio di un anemic domain model poiché tanta logica finisce nel repository piuttosto che negli oggetti del dominio.
Dopo molte esitazioni, una domanda:
O meglio alcune domande ...
- È questo il modello che devono lavorare con EF 4 Codice Prima?
- C'è un modo per conservare l'uso di new() e funzionano ancora con EF 4/POCO/Code First?
- Esiste un altro schema che lascerebbe la logica nell'oggetto dominio e funzioni ancora con EF 4/POCO/Code First?
- Questa restrizione verrà revocata nelle versioni successive del supporto Code First?
A volte cercando di andare il POCO/ Persistenza percorso ignoranza si sente come nuoto controcorrente, altre volte ci si sente come nuotare fino cascate del Niagara. Eppure, io voglio credere ...
Benvenuti in Stack Overflow. Il problema fondamentale è che ho davvero una gerarchia di oggetti profondi, in cui ogni livello sa come creare istanze di oggetti del livello successivo. La mia comprensione ed esperienza è che dovrei camminare manualmente la mia gerarchia di oggetti per collegare tutti gli oggetti individualmente a un ObjectContext prima che possano essere mantenuti. La mia applicazione è abbastanza complessa, ma cercherò di distillarla in un semplice esempio completo. Non accadrà oggi però, si spera domani. –
@Eric J, non è quello che ho capito dalla risposta di Rowan. A me sembra che "Se aggiungi qualcosa alla raccolta pubblica di oggetti correlati, EF memorizzerà automaticamente quell'entità anche se non l'hai aggiunta esplicitamente all'ObjectContext". Questo è coerente con il comportamento di LINQ to SQL. –