2010-10-27 3 views
2

Nous avons deux procédures stockées dans Microsoft SQL Server qui renvoient des données qui sont conceptuellement du même type. On retourne un ID comme SCOPE_TDENTITY() (un numérique), tandis que l'autre renvoie 0 (un int32). Nous avons un type complexe avec un ID de propriété. Si cette propriété est une décimale annulable, nous recevons l'erreur suivante lors de l'énumération des résultats de la procédure stockée qui retourne un int32:Comment convertir des types numériques dans le mappage d'une procédure stockée en un type complexe dans Entity Framework 4?

The 'ID' property on 'EntitryRequestReturn' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Decimal'. 

Modification du type de la propriété à un int32 se déplace simplement l'erreur à l'autre sproc, avec les types de données répertoriés dans l'ordre inverse. Le fait de savoir si les types sont nullables ne fait aucune différence.

Comment puis-je obtenir EF4 pour convertir une colonne int renvoyée à partir d'un sproc en une décimale lors de la construction du type complexe?

Répondre

0

Cela a fonctionné dans mon exemple. Cela peut aider ici.

Si la procédure stockée renvoie des données via une instruction select, il est très utile de lancer tous les champs de retour, même s'ils sont dans leurs types de données natifs.

select convert(int, myInt) as myInt 

fonctionne mieux que

select myInt 

Beaucoup de fois mes SPs montreraient une chaîne comme le dernier champ quand il était vraiment un Int32. J'ai ajouté des instructions de conversion à tous les champs et il n'a jamais refait cette erreur. Cela dit, vous pouvez simplement faire la conversion dans le SP avant de l'envoyer à EF.

+0

C'est ce que nous avons fait. La plupart de nos problèmes ont été provoqués par SCOPE_IDENTITY, que nous avons renvoyé comme un entier maintenant. Pour utiliser EF, nous traitons les sprocs avec des types de retour changeants comme des bogues et nous réparons le sproc. – Cirdec

Questions connexes