Я использую Entity Framework 5 code first
. В моей таблице есть столбец Active
, а его тип данных имеет тип int
. Значения, которые хранятся в активном состоянии, - 0
, 1
и null
.Код структуры Entity сначала конвертирует между классом boolean и integer столбца
У меня есть класс, который мне нужно сопоставить с этой таблицей.
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public bool? IsActive { get; set; }
}
Вот мой конфигурационный файл. Я пытаюсь сопоставить свое свойство boolean в моем классе с целым полем в базе данных.
class CommandExecutionServerConfiguration : EntityTypeConfiguration<CommandExecutionServer>
{
internal CommandExecutionServerConfiguration()
{
this.ToTable("tblCommandExecutionServers");
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("bit");
}
}
Это не работает. Ошибка, я получаю это:
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'
Я попытался добавить .HasColumnType("bit")
и подумал, что это может занять от моей проблемы. Как мне это сделать? В идеале я бы хотел, чтобы 0 было ложным, 1 - true, null - null, а любое другое - false.
UPDATE
Если я изменю выше:
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("int");
... тогда я получаю следующее сообщение об ошибке:
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'.
Вы пробовали с HasColumnType ("int")? С той же проблемой я задал тип столбца для бит в SQL-сервере. – tschmit007
Смотрите мое обновление выше. Да, я также хотел бы установить его бит, но это не мой сервер, поэтому я не могу пойти на изменение структуры таблиц :) –