Quantcast
Channel: Roberto Brunetti » .NET 4.0
Viewing all articles
Browse latest Browse all 10

ADO.NET EF 4.0 POCO Bug e Solution

$
0
0

Sempre sul progetto di cui abbiamo parlato in post precedenti stiamo valutando l’introduzione di ADO.NET EF 4.0 al posto dell’attuale Linq to SQL: la scelta iniziale era caduta su L2S per creare velocemente uno strado DAL che veniva poi disaccoppiato dal layer Dal generico superiore che incapsula tutte le chiamate.

Visto che il database è 2 TB occorre stare un attimo attenti: anche L2S potrebbe rappresentare un problema di performance, ma visto quanto costa creare il modello possiamo permetterci di valutarlo prima di riprendere il nostro generatore di codice con il buon vecchio DataReader a manella.

Ovviamente stiamo sperimentando l’utilizzo di classi POCO e non. Dopo varie prove siamo arrivati a costruire il modello (tramite .tt) in automatico e ben soddisfatto del risultato ho inserito il modello .edmx nello stesso progetto Dal che contiene il modello che non usa le classi POCO.

Anche se i nomi delle classi POCO e del rispettivo modello .edmx iniziano tutte per POCO (POCOCatalog) e le classi derivate da EntityObject hanno invece i nomi reali, a runtime, sembra, che EF non riesca a eseguire il mapping durante l’esecuzione di una query.

Avevo tenuto i nomi diversi proprio per evitare di creare confusione nella scrittura dei primi test e unit test.

Visto che i nomi delle proprietà delle classi devono corrispondere a quelle del modello ho passato oltre un ora a capire perchè continuava a dare questo errore:

Mapping and metadata information could not be found for EntityType 'XXXX.POCOCatalog’

I problemi potrebbero essere

1) Nome del campo sbagliato…visto che li autogenero era impossibile, ma controllare non guasta mai

2) Non aver marcato “virtual” le proprietà collection (che servono per creare le navigation properties). Serve per Lazy Load.

Alla fine di un controllo da certosino ho deciso di partire con una cosa semplice (che mi funzionava in qualche progetto di test): ho distrutto l’edmx e l’ho ricreato con una sola Entità con 3 sole proprietà: in questo modo non potevo sbagliare. Niente da fare.

Dopo altri tentativi ho scoperto che se il progetto Visual Studio contiene due file .edmx, anche se hanno nomi diversi, viene fuori il problema.

E’ bastato spostare il modellone in un’altra dll e tutto funziona…


Viewing all articles
Browse latest Browse all 10

Trending Articles