Viste da MSSQL in Entity Framework senza chiave primaria
14 novembre 2012
Spesso abbiamo bisogno di importare in Entity Framework una vista SQL, e molte volte la vista è il risultato di comandi UNION, GROUP BY e simili, quindi non ha una chiave evidente. Entity Framework, però, ha bisogno di una chiave primaria (o di qualcosa che possa usare come tale) su ogni oggetto.
Si possono utilizzare le seguenti regole:
- per forzare Entity Framework a utilizzare una colonna come chiave primaria, racchiuderla in
ISNULL; - per forzare Entity Framework a non utilizzare una colonna come chiave primaria, racchiuderla in
NULLIF.
Un modo semplice per applicarlo è racchiudere l’istruzione SELECT della vista in un’altra SELECT:
SELECT
ISNULL(MyPrimaryID, -999) AS MyPrimaryID,
NULLIF(AnotherProperty, '') AS AnotherProperty
FROM ( ... ) AS temp
Entity Framework deduce la chiave dalla nullabilità delle colonne: una colonna non nullable entra a far parte della chiave, una nullable no.