Torna al Blog

    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.