Entity Framework: mapper tinyint en booléen

c# entity-framework mapping

Question

Par défaut, Entity Framework mappe tinyint sur octet.

j'ai essayé de changer le type sous-jacent après qu'il ait été généré en booléen, mais en obtenant une erreur de compilation

La cartographie des membres spécifiée n'est pas valide. Le type 'Edm.Boolean [Nullable = False, DefaultValue =]' du membre blah ...

est-ce possible en 4.0?

Ce n'était pas mon idée d'utiliser la colonne tinyint comme booléen. cela a été fait automatiquement par une autre équipe utilisant hibernate, ce qui semble le faire de cette façon pour la compatibilité avec mysql. De toute évidence, tinyint a plus de valeurs que 2. Je cherche un moyen de le mapper de sorte que tout accepter pour 1 soit faux ou tout ce que accepter pour 0 est vrai. soit travaillerait pour moi

Existe-t-il un moyen de brancher un traducteur de type sur EF?

Réponse acceptée

Sur la page de MSDN sur les types entiers , nous voyons que le type tinyint représente un entier compris entre 0 et 255.

Un bool , en revanche, ne représente qu'un binaire 0 ou 1 .

Changer le mappage par défaut d’ byte en bool (s’il était même possible, ce qui semble ne pas être le cas selon cette page ) n’a aucun sens - comment, par exemple, représenteriez-vous la valeur 42 (un tinyint valide) en tant que bool ?

Si vous avez besoin d'une entité avec une propriété de type bool , nous vous suggérons de la mapper sur une colonne de type bit .


Réponse populaire

En fait, la principale raison pour laquelle les entiers sont souvent utilisés dans une base de données est due au fait que de nombreux moteurs de base de données n'autorisent pas les index sur les champs de bits. La plupart des moteurs de base de données tentent de regrouper plusieurs champs de bits dans un octet «interne» vers un espace sécurisé. En conséquence, le champ de bits n'est pas vraiment disponible pour l'indexation.

La norme de facto est que 0 est égal à faux et toutes les autres valeurs sont égales à vrai. Cependant, EF ne prend pas en charge ce type de mappage. La meilleure méthode consiste à utiliser un champ d'ombre privé déclaré sous forme d'octet mappé sur EF. Deuxièmement, vous créez une propriété alias boolean qui est utilisée par votre code.

Mapper des propriétés privées avec EF nécessite un code de réflexion.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow