我首先使用Entity Framework 5代码.我的表有一个名为Active的列,其数据类型为int类型.存储在Active中的值为0,1和null.
我有一个我需要映射到此表的类.
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public bool? IsActive { get; set; }
}
这是我的配置文件.我试图将我的类中的布尔属性映射到数据库中的整数字段.
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为真,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'.
最佳答案 我尝试了以下操作,因为我不知道Entity Framework是否可以为我处理转换.
我删除了这一行:
this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("int");
然后我在CommandExecutionServer类中添加了一个属性:
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public int? Active { get; set; }
public bool IsActive
{
get
{
return (Active == 1) ? true : false;
}
}
}
可能有更好的方法,但这对我现在有用.如果任何人可以更好,那么请继续:)