Quelle est la meilleure façon de traiter la conversion de 0/1 en False / True dans EF 4.x?

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)