Entity framework code first convertir entre la classe boolean et de la colonne de type entier
Je suis en utilisant Entity Framework 5 code first
. Ma table a une colonne appelée Active
et son type de données est de type int
. Les valeurs qui sont stockées dans Active sont 0
, 1
et null
.
J'ai une classe que j'ai besoin de la carte à cette table.
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public bool? IsActive { get; set; }
}
Voici mon fichier de configuration. Je suis en train de carte ma propriété booléenne dans ma classe dans le champ entier de la base de données.
class CommandExecutionServerConfiguration : EntityTypeConfiguration<CommandExecutionServer>
{
internal CommandExecutionServerConfiguration()
{
this.ToTable("tblCommandExecutionServers");
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("bit");
}
}
Cela ne fonctionne pas bien. L'erreur que je reçois est:
The 'IsActive' property on 'CommandExecutionServer' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Boolean'
J'ai essayé d'ajouter .HasColumnType("bit")
et de la pensée qu'il pourrait prendre à mon problème. Comment dois-je faire? Idéalement, je voudrais 0 false 1 true, null la valeur null, et tout autre nombre pour de faux.
Mise à JOUR
Si je change ci-dessus:
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("int");
...alors j'obtiens l'erreur suivante:
Member Mapping specified is not valid. The type 'Edm.Boolean[Nullable=True,DefaultValue=]' of member 'IsActive' in type 'MyProject.Infrastructure.EntityFramework.CommandExecutionServer' is not compatible with 'SqlServer.int[Nullable=True,DefaultValue=]' of member 'Active' in type 'CodeFirstDatabaseSchema.CommandExecutionServer'.
Voir ma mise à jour ci-dessus. Oui je voudrais aussi qu'elle soit à peu, mais ce n'est pas mon serveur, donc je ne peux pas aller modifier les structures de la table 🙂
OriginalL'auteur Brendan Vogt | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
J'ai essayé ce qui suit, parce que je ne sais pas si Entity Framework peut gérer la conversion pour moi.
J'ai supprimé cette ligne:
J'ai ensuite ajouté une propriété à mon
CommandExecutionServer class
:Il pourrait y avoir une meilleure façon, mais cela fonctionne pour moi pour l'instant. Si quelqu'un peut mieux ce alors s'il vous plaît aller de l'avant 🙂
Non, je ne l'ai pas, comme l'Ignorer. Pas d'exception cette façon.
OriginalL'auteur Brendan Vogt
ado.net va convertir les bits de booléens. Donc, il suffit de convertir votre entier en un peu dans votre instruction select en t-sql.
OriginalL'auteur 1c1cle