2010-06-24 9 views
15

Ho una vista specifica creata nel mio DB (si aggiunge a circa 5-6 tabelle con un join sinistro). Questa vista viene aggiunta al mio edmx (entity framework 1.0). Di recente ho notato che uno dei dischi della colonna ottenuti con l'edmx (LINQ to entità e poi ToList()) più volte ottenuto duplica se nella vista del database erano diversiDiscordanza dei risultati del framework Entity per le viste del database

Column-N (Expected result/ result from DB view) 
--------- 
data1 
data2 
data3 
data4 
data5 

Column-N(Actual result generated by entity framework) 
--------- 
data1 
data1 
data1 
data1 
data1 

Ho sparato il mio profiler SQL, preso la query che è stata inviata dalla mia applicazione a SQL Server, l'ha eseguita e mi ha restituito il risultato previsto.

MSDN ha un post simile here e here ma il moderatore non ha elaborato su come risolvere questo problema. La mia chiave sembra essere un GUID

La causa principale hai fatto notare penso è corretto, il problema è sulla mappatura lato EF applicazione, EF ha diverse norme oggetto di mappatura con database. quando i risultati della query sono stati restituiti dal database , l'EF eseguirà il mapping sulla memoria dell'applicazione in base alla propria logica .

È importante prendere in considerazione questa logica quando si seleziona la query di visualizzazione sul lato del database. I pensa che dovresti fare qualche aggiustamento sulla tua query di visualizzazione .

Non sono sicuro se hai ordinato il problema, se non si prega di fornire la struttura database relativo a questo problema e la query vista che si ha scritta.

Grazie Binze

Qualcuno ha riscontrato un problema simile prima d'ora?

risposta

17

Il problema è in effetti con la chiave. Devi a) avere un identificativo univoco per ogni riga nella vista. e b) mappare la chiave di conseguenza in edmx. In caso contrario, la logica di mappatura vedrà ogni riga e figura successive che può utilizzare la stessa istanza di oggetto restituita prima di

+0

Hai ragione.Stavo assumendo erroneamente che stava raccogliendo il mio GUID come chiave primaria fino a quando non sono andato e ho visto lo StorageModel e il Modello concettuale. Stava usando qualche altra colonna come chiave primaria e quindi il casino. risolto correggendo la chiave manualmente (senza utilizzare GUI VS2008) – ram

0

Lo stesso problema per me. Un Entity View (VReport) è stata generata automaticamente dal wizard VS2010 a qualcosa di simile:

class VReport 
Line: int (key) 
Desc: string 
Date: DateTime 

Quando ho recuperato il record dal database, la query SQL è stata formata correttamente e restituito il attesi (e distinte) risultati, ma l'Entity Framework ha invece restituito molti record duplicati.

Ma invece, anche la colonna Data/campo avrebbe dovuto partecipare nella formazione della chiave di entità

Così, per risolvere questo problema, ho cambiato la proprietà del campo da Entità chiave: false ->true

class VReport 
Line: int (key) 
Desc: string 
Date: DateTime (key) 
Problemi correlati