2009-08-05 17 views
21

Ho creato una vista nel mio database che vorrei includere nel mio modello di entità. Tuttavia, quando provo ad aggiornare il modello di entità tramite VS 2008, un messaggio di avviso mi informa che la TABELLA O VISTA che sto cercando di aggiungere non ha una chiave primaria.Views and Entity Framework

Sembra che per aggiungere una vista al modello, questo deve avere un campo chiave! Come posso aggiungere questa vista al mio modello se le viste non sono autorizzate ad avere un campo chiave, almeno in firebird che è il DBMRS che sto usando.

Qualche idea su come risolvere questo problema?

+0

Ecco un'estensione di Visual Studio che fa tutto per te, controlla questo post: [Frustrato dalla mancanza di supporto per le viste SQL in 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

Questo post può essere utile: [http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/](http://smehrozalam.wordpress. it/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables /) –

risposta

10

C'è una grande risposta a quella qui: Entity Framework and SQL Server View (vedi risposta accettata:. https://stackoverflow.com/a/2715299/53510)

EF deduce un PK per le viste mediante la combinazione di tutti i campi non annullabili. È possibile utilizzare ISNULL e NULLIF per manipolare il nullability delle colonne della vista forzando così EF a scegliere il PK desiderato.

+4

Se si utilizza ISNULL o NULLIF, ciò rende i campi di sola lettura e quindi la vista diventa una visione di sola lettura per la maggior parte. Questo è utile solo in alcune situazioni –

+0

Non ha funzionato per me nella versione EF 5.0. – Dave

0

Non ci sono chiavi nelle viste Firebird. Invece, impostare uno (o più) campo come 'non nullo' con il seguente comando:

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

Poi reimportare il database in Entity Framework.