【发布时间】:2017-02-08 06:27:53
【问题描述】:
我正在使用 Oracle 托管数据访问组件 代码优先
尝试将 Int16 转换为布尔值 但总是收到异常
''class name' 上的'property name' 属性不能设置为 'System.Int16' 值。您必须将此属性设置为非空值 'System.Boolean'
如果我的 POCO 中有一个布尔值作为属性并使用 DbSet 的 SqlQuery 或手动创建数据读取器,我会收到强制转换异常
有趣的是,如果我使用普通的 EF,例如
var test = dbContext.Set<Person>().Where(c=> 1==1).ToList();
不抛出异常,并设置预期的属性值。
一个基本模型
public class Person
{
[Key]
public int Id { get; set; }
public bool Active { get; set; }
}
调用 ToList 引发异常
static void Main(string[] args)
{
var dbContext = new Context();
var sql = "select 1 Id, cast(1 as Number(1,0)) Active from dual";
var query = dbContext.Set<Person>().SqlQuery(sql);
var list = query.ToList();
}
我在我的配置文件中定义了 edmMappings(我认为这并不重要),如下所示:
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
<add NETType="bool" MinPrecision="1" MaxPrecision="1" DBType="Number" />
<add NETType="byte" MinPrecision="2" MaxPrecision="3" DBType="Number" />
<add NETType="int16" MinPrecision="4" MaxPrecision="5" DBType="Number" />
<add NETType="int32" MinPrecision="6" MaxPrecision="10" DBType="Number" />
<add NETType="int64" MinPrecision="11" MaxPrecision="19" DBType="Number" />
</edmNumberMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
我的最终目标是避免修改我的 POCO
【问题讨论】:
-
不确定为什么您会期望从整数自动转换为布尔值?要么将数据库列设为布尔值,要么将类属性设为整数。
-
我的oracle版本不支持布尔值,不知道有没有版本支持
标签: c# oracle entity-framework-6