【发布时间】:2011-03-17 20:39:16
【问题描述】:
我有一个映射到表 EntityTable 的实体,它非常简单,由大约 4 或 5 个值类型属性组成。但是,根据我访问的数据库,其中一个属性的架构是不同的:在大多数架构中,它是 decimal,在少数其他架构中,它是 smallint(或 C# 中的 Int16) .显然,当 EF 尝试将 Int16 值映射到需要 decimal-typed 属性的实体时,这会使 EF 出错。
所以我的解决方法是在 EF 上下文中调用 ExecuteStoreQuery(),并让 FauxEntity 将不稳定的属性声明为 object,而不是明确地 decimal 或 Int16。然后我可以专门手动处理属性的拆箱。
但是,这不起作用!属性的值是null,而不是对装箱Int16(或decimal 值)的对象引用!这很奇怪,因为我可以轻松地声明如下内容:
object intVal = 16;
intVal 然后将成为一个装箱的int 值的实例。然后我可以适当地拆箱。
这就是我对 ExecuteStoredProcedure 的期望——它应该将值放入对象属性中,然后我可以进行一系列拆箱测试以正确地拆箱该值。但是,该值永远不会成功地装箱到 object 属性中!
ExecuteStoreQuery<T>() 甚至可以做到这一点吗?为什么它不能将值类型加载到object-typed 属性中?
顺便说一句,我知道我可以通过针对 SQL 代码执行 DataReader 并手动转换每个结果列来解决手头的问题。我只是想知道为什么 ExecuteStoreQuery<T>() 的行为不如预期。
【问题讨论】:
标签: c# .net entity-framework-4