I am using Entity Framework 5 code first
. My table has a column called Active
and its datatype is of type int
. The values that are stored in Active are 0
, 1
and null
.
I have a class that I need to map to this table.
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public bool? IsActive { get; set; }
}
Here is my configuration file. I am trying to map my boolean property in my class to the integer field in the database.
class CommandExecutionServerConfiguration : EntityTypeConfiguration<CommandExecutionServer>
{
internal CommandExecutionServerConfiguration()
{
this.ToTable("tblCommandExecutionServers");
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("bit");
}
}
This is not working well. The error that I am getting is:
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'
I tried adding .HasColumnType("bit")
and thought that it might take of my problem. How do I do this? Ideally I would like 0 to be false, 1 to true, null to be null, and any other number to false.
UPDATE
If I change the above to:
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("int");
...then I get the following error:
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'.