实体框架4 ExecuteStoreQuery - 无法获得对象类型属性
我有一个映射到表EntityTable的实体,非常简单,由大约4或5个值类型属性组成。但是,根据我访问的数据库,对于其中一个属性,模式是不同的:在大多数模式中,它是一个decimal
,在其他几个中,它是一个smallint
(或在C#中的Int16
)。很明显,当EF试图将Int16
值映射到预期为decimal
型特性的实体时,它会跳过EF。实体框架4 ExecuteStoreQuery <T> - 无法获得对象类型属性
所以我的解决办法是要求ExecuteStoreQuery()的EF上下文和有FauxEntity声明靠不住的属性作为object
并没有明确decimal
或Int16
。然后,我可以专门处理手动拆箱。
但是,这是行不通的!物业的价值是null
而不是对盒装Int16
(或decimal
价值)的对象引用!这是奇怪,因为我可以很容易地声明是这样的:那么
object intVal = 16;
intVal
将成为盒装int
值的一个实例。然后我可以适当地取消选择。
这就是我对ExecuteStoredProcedure的期望 - 它应该将值抛入对象属性中,然后我可以执行一系列拆箱测试来正确解开该值。但是,价值永远不会成功装箱在object
属性!
这是甚至可能与ExecuteStoreQuery<T>()
?为什么它不能将值类型加载到object
-type属性中?
顺便说一句,我知道我可以通过对SQL代码执行DataReader并手动铸造每个结果列来解决手头上的问题。我只是想知道为什么ExecuteStoreQuery<T>()
不符合预期。
restrictions on TElement
在MSDN中。引用:
对于采用通用结果类型参数的以前方法,TResult可以是基元类型,实体类型或任何自定义类型。该类型不必在实体框架概念模型中定义。如果指定类型的类型未在概念模型中定义,或者不是基本类型,则应用以下映射约定。
类型:
- 一定不能是抽象的。
- 必须有一个默认的构造函数。
类型的每个属性:
- 必须有一个二传手。
- 必须对应于CSDL中的基元类型。
- 必须与生成的DbDataReader中的列名相对应(提供者实现确定列是否与该属性具有相同的名称)。如果类型属性的名称与DbDataReader的字段不匹配,则实体框架将在属性模型中定义该属性的默认值。
所以它看起来像第二个项目符合性能要求是什么让我绊倒。 '对象'肯定不是原始类型。唉。感谢Craig在MSDN中进行挖掘,我明显错过了! – kdawg 2011-03-17 21:30:39