2009-09-18 8 views
13

Je commence juste à en apprendre un peu plus sur le framework d'entité et je n'ai pas beaucoup d'expérience avec les ORM.Définir la propriété du modèle à booléen dans Entity Framework

Dans ma petite application j'ai une table, cette table de serveur sql a plusieurs colonnes comprenant un PrimaryKey (int) un nom (chaîne) et un drapeau (tinyint). Lorsque j'ai importé cette table, le type de données Flags est automatiquement affecté en tant qu'octet. Cela est bien, mais le drapeau devrait vraiment être un booléen, donc je

  1. Clicked sur la Détails Mapping
  2. Sélectionné ma propriété Drapeau
  3. modifié le type d'octet à Boolean
  4. Reconstruit l'application

Je puis obtenu cette erreur:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Boolean[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.MyItem' is not compatible with 'SqlServer.tinyint[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.Store.MyItem'.

Est-il possible d'avoir

MyItem item = new MyItem(); 
item.Flag = true; 

et ont drapeau, sauf à 1 dans la base de données?

+0

Pourquoi auriez-vous besoin de ça au lieu d'un bool? –

+0

@JonasStensved le problème était que la table de base de données que j'utilisais avait le type de données incorrect. Une fois que j'ai changé la table pour utiliser un 'bit' au lieu d'un' byte', tout a fonctionné parfaitement. –

Répondre

16

Vous pouvez changer le type de données à MyFlagbit dans la base de données.

+1

Merci, le bit est certainement le bon type de données à utiliser dans cette situation –

+0

Et si j'utilise une vue? –

+0

@Bruno que voulez-vous dire? –

2

Je pense que pour le tinyint vous devrez faire une classe partielle et utiliser un champ séparé qui lit/écrit correctement à ce champ. Cependant, le cadre interprétera correctement les champs bit comme boolean.

Vous pouvez essayer quelque chose comme ci-dessous comme partiel ..

public partial class MyItem 
{ 
    public bool FlagBool 
    { 
     get { return Flag == 1; } 
     set { Flag = value ? 1 : 0; } 
    } 
} 
+0

Merci, vous avez tout à fait raison, j'aurais dû utiliser bit à la place. –

+0

Pas de problème, déjà vécu. –

Questions connexes