2010-06-24 9 views
15

Tengo una vista específica creada en mi base de datos (se une a 5-6 tablas con una combinación izquierda). Esta vista se agrega a mi edmx (entidad marco 1.0). Hace poco me di cuenta de que uno de los discos de la columna obtenido mediante el edmx (LINQ a las entidades y luego ToList()) consiguió duplica varias veces, aunque en la vista de la base de datos eran diferentesdiscrepancia en el resultado del marco de entidades para las vistas de una base de datos

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 

disparé mi Analizador de SQL, tengo la consulta que envió mi aplicación a SQL Server, la ejecutó y me devolvió el resultado esperado.

MSDN tiene una publicación similar here y here pero el moderador no ha explicado cómo resolver este problema. Mi llave pasa a ser un GUID

La causa usted ha señalado creo es correcto, el problema está en el mapeo lado EF aplicación, como EF tiene reglas de mapeo de objetos diferentes con base de datos. cuando se devuelven los resultados de la consulta de la base de datos, EF hará la asignación en la memoria de la aplicación de acuerdo con su propia lógica diseñada.

Es importante tener en cuenta estas lógicas al diseñar su consulta de vista en su base de datos. I creo que debe hacer algún ajuste en su consulta de vista.

No estoy seguro de si se ha ordenado el problema, si no por favor proporcionar la estructura de base de datos relacionado con este tema y la consulta vista que se tiene escrita.

Gracias Binze

Alguien ha encontrado un problema similar antes?

Respuesta

17

El problema es, de hecho, con la tecla. Tienes que a) tener un identificador único para cada fila en la vista. y b) mapee esa clave en consecuencia en el edmx. De lo contrario, como dice su cotización, la lógica de mapeo verá cada fila y figura subsecuentes que puede usar la misma instancia de objeto que devolvió antes de

+0

Tienes razón.Estaba asumiendo erróneamente que estaba recogiendo mi GUID como clave principal hasta que fui y vi el Modelo de almacenamiento y el Modelo conceptual. Estaba usando alguna otra columna como la clave principal y, por lo tanto, el desorden. Solucionado al cambiar la clave manualmente (sin usar la GUI VS2008) – ram

0

Mismo problema para mí. Una Entidad Vista (VReport) se genera automáticamente a partir asistente VS2010 a algo como:

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

Cuando fui a buscar los registros de la base de datos, la consulta SQL se formó correctamente y devuelven los resultados esperados (y distintas), pero el Marco de la Entidad en su lugar devolvió una gran cantidad de registros duplicados.

Pero en cambio, también la columna Fecha/campo tendría que partecipate en la formación de la Entidad CLAVE

lo tanto, para resolver este problema, he cambiado la propiedad del campo de Entidad Clave: false ->true

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