我正在尝试使用Entity Framework对现有数据库进行概念验证项目。我正在使用通过NuGet检索的6.0.2版本。
为了便于阅读,我们有使用'Y'/'N'来表示数据库中的布尔值的惯例。我seen that this是now possible with EF 6,但它打破了我的映射。
这是我的上下文代码:
public class MyContext : DbContext {
public DbSet<Space> Spaces { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Configurations.Add(new SpaceConfiguration());
modelBuilder.Properties().Where(p => p.PropertyType == typeof(Boolean)).Configure(p => p.HasColumnType("yes no char as boolean"));
}
}
我设置了以下集成测试以检查我是否能够连接到数据库:
[TestMethod]
public void TestMethod1() {
using (var context = new MyContext()) {
Assert.IsTrue(context.Spaces.Any());
Assert.IsTrue(context.Spaces.First().IsActive);
}
}
当我离开上面的Context时,第一个Assert失败,说“Sequence不包含匹配元素”。
如果我从Context注释掉配置,则第二个Assert失败。这一次,我收到一条消息,说“'Space'上的'IsActive'属性无法设置为'System.String'值。您必须将此属性设置为'System.Boolean'类型的非null值。 “
属性Space.IsActive
设置为布尔值。有任何想法吗?我已多次查看该配置行以查找拼写错误。