Le Proc stocké renvoie une colonne avec la valeur 0 ou 1 sans conversion en BIT. Dans mon POCO, si je déclare le champ comme
public bool MyColumn {get; set;}
Je reçois cette erreur:
The specified cast from a materialized 'System.Int32' type to the 'System.Boolean' type is not valid.
Cela a du sens puisque EF reconnaît la valeur renvoyée sous forme d’entier.
Je me demande s’il existe un moyen simple (d’append une annotation ou d’utiliser une API courante), de convertir automatiquement 0/1 en Faux / Vrai dans le mappage en arrière-plan sans toucher au Proc?
Merci d’avance!
Ce que vous pouvez faire, c’est d’avoir une autre propriété pour représenter la représentation booléenne. Décorez-le avec l’atsortingbut NotMapped
afin que EF ne l’envisage pas pour le mappage. Do et If condition et renvoie true /false
fonction de la valeur de la propriété Other.
public Class Customer { [NotMapped] public bool MyColumnBool { get { return (MyColumn ==1); } } public int MyColumn {get; set;} // other properties }
Une autre option consiste à renvoyer un BIT à partir de la procédure stockée afin d’éviter tout transtypage côté C # ou aucune décoration bizarre. Cela signifie que vous pouvez convertir la valeur entière en BIT dans T-SQL comme je le fais ci-dessous:
select col1, col2, CONVERT(BIT, CASE WHEN col3 IS NULL THEN 0 ELSE 1 END) as colWithBit FROM table1
Utilisez System.Convert.ToBoolean(int)