2009-04-23 9 views
2

J'ai la structure de la table de base suivante (que je ne suis pas autorisé à changer) dans ma base de données:Entity Framework en utilisant des vues et des procédures stockées

Adresse
(PK) AddressID
Ligne1
. ..

personne
(PK) personID
(FK) AddressID
FirstName
...

Student
(PK) StudentID
(FK) personID
StudentNumber
...

Je voudrais combiner personne et étudiant dans une entité d'étudiant en utilisant l'approche Table par Type. Cependant, ces tables ne sont pas conformes à la restriction EF que la sous-table (Student) doit avoir le PK et FK être la même colonne. Contrairement à mon DB, dont ils sont des colonnes séparées.

Mon idée suivante était de créer une vue et de créer une entité hors de la vue. Je crée une vue appelée StudentView avec une jointure et toutes les colonnes. J'ai ensuite importé cette vue dans le modèle EF. Tout allait bien jusqu'à ce que j'ai essayé de mettre à jour. Comme les vues ne peuvent pas être mises à jour, j'ai créé des procédures stockées Insérer/Mettre à jour/Supprimer et les ai liées à mon entité Étudiant (j'ai fait les paramétrages sp supplémentaires pour toutes les relations FK).

Cependant, maintenant je reçois l'erreur suivante:

Error 2027: If an EntitySet or AssociationSet includes a function mapping, all related entity and AssociationSets in the EntityContainer must also define function mappings.

Je n'ai pas pu trouver beaucoup d'informations partout à ce sujet. Il me semble que cela signifie que si une entité utilise des procédures stockées, toutes les entités le font (ou du moins toutes les entités référencées, ce qui dans mon cas équivaut à peu près à toutes). Cependant, d'autres messages d'erreur que j'ai reçus de EF ont été trompeurs.

Est-ce que quelqu'un sait comment passer ce? De plus, toute suggestion sur l'utilisation de Table par Type dans mon cas (ce que je ne pense pas possible) serait également utile.

Répondre

1

J'ai compris cela. Il se trouve que c'était parce que j'avais mis quelques relations à 0..1: 1. Il semble que lorsque cela se produit, tout ce qui a ce type de relation doit également utiliser des procédures stockées. Redéfinir les relations à 0..1: * a résolu mon problème.

Questions connexes