2009-08-05 26 views
21

He creado una vista en mi base de datos que me gustaría incluir en mi modelo de entidad. Sin embargo, cuando trato de actualizar el modelo de entidades a través de VS 2008, un mensaje de advertencia me informa que la TABLA O VISTA que estoy tratando de agregar no tiene una clave principal.Vistas y Entity Framework

Parece que para agregar una vista al modelo, ¡debe tener un campo clave! ¿Cómo puedo agregar esta vista a mi modelo si las vistas no tienen campo clave, al menos en Firebird, que es el DBMRS que estoy usando?

¿Alguna idea de cómo solucionar esto?

+0

Aquí hay una extensión de Visual Studio que lo hace por usted, revise esta publicación: [¿Frustrado por la falta de soporte para SQL-Views en ADO.NET Entity-Framework Designer?] (Http://blogs.microsoft. co.il/blogs/shimmy/archive/2010/09/03/frustrated-by-lack-of-support-for-sql-views-in-ado-net-entity-framework-designer.aspx) – Shimmy

+2

Esta publicación puede ser útil: [http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/](http://smehrozalam.wordpress. com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables /) –

Respuesta

10

Hay una gran respuesta a eso aquí: Entity Framework and SQL Server View (ver respuesta aceptada:. https://stackoverflow.com/a/2715299/53510)

EF infiere una PK para las vistas mediante la combinación de todos los campos que no son anulables. Puede utilizar ISNULL y NULLIF para manipular la nulabilidad de las columnas de vista, lo que obliga a EF a elegir el PK que desee.

+4

Si usa ISNULL o NULLIF, eso hace que los campos sean de solo lectura y, por lo tanto, la vista se convierte en una vista de solo lectura en su mayor parte. Eso solo es útil en algunas situaciones –

+0

No funcionó para mí en la versión EF 5.0. – Dave

0

No hay claves en las vistas de Firebird. En su lugar, establecer una (o más) de campo como 'no nulo' con el siguiente comando:

update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'A_FIELD') and (RDB$RELATION_NAME = 'A_VIEW') 

A continuación, volver a importar la base de datos en el marco de la entidad.