我正在使用EF4,代码优先。因此,我的模型类混合了公共属性,一些虚拟属性(对于来自其他表的延迟加载数据)和一些附加了[NotMapped]
属性的属性,以便EF跳过它们。
有时我喜欢使用原始查询:c.Database.SqlQuery<T>("select ...")
将EF用作行映射器。
我在Intellitrace中注意到这些查询为“IndexOutOfRange”生成了大量抛出和捕获的异常。经过一番查看后,模型对象的虚拟和[NotMapped]属性都是例外。我不想构建一个只包含表属性的新数据模型类或父类;是否有一些配置步骤我错过了告诉原始查询运行器中的行映射器注意其余EF使用的相同注释?也许他们在EF5中解决了这个问题?
答案 0 :(得分:4)
如果执行dbContext.Database.SqlQuery
EF将永远不会使用映射。它将仅使用结果集中的属性名称和列的简单匹配。请尝试使用dbSet.SqlQuery
。它应该反映映射,因为它可以将数据作为附加实体加载。