EF SqlQuery尝试映射对象属性,即使它归因于[NotMapped]

Alx*_*Alx 6 c# entity-framework

我有一个我执行的存储过程 context.Database.SqlQuery<MyObject>("MyProc")

MyObject 有一个只读属性:

[NotMapped]
public bool IsSomething { get { return this.otherproperty == "something"; } }
Run Code Online (Sandbox Code Playgroud)

所以我得到错误:

System.IndexOutOfRangeException:IsSomething at System.Data.ProviderBase.FieldNameLookup.GetOrdinal etc

这是因为MyProc IsSomething在结果列中没有(我100%肯定这可能是原因).

不应该忽略它,因为它是[NotMapped]吗?我需要为其他东西设置SqlQuery吗?

为了让事情变得更加奇怪,我只在生产中看到它,从Stackify的日志中看,并且页面似乎正确加载而浏览器没有任何错误.

Nko*_*osi 3

根据文件

\n
\n

Database.SqlQuery<TElement> Method (String,\xe2\x80\x82Object[])

\n

创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。该类型可以是具有与查询返回的列名称相匹配的属性的任何类型,也可以是简单的原始类型。该类型不必是实体类型。即使返回的对象类型是实体类型,上下文也永远不会跟踪此查询的结果......

\n
\n

强调我的

\n

它正在从查询返回的阅读器中查找IsSomethingSystem.Data.ProviderBase.FieldNameLookup.GetOrdinal错误消息中

\n

因为该列不存在,您将得到IndexOutOfRangeException.

\n
\n

难道不应该忽略它吗,因为它是[NotMapped]

\n
\n

不会。它会忽略对象上存在的任何属性,包括[NotMapped]。请参阅上面引用的报价

\n
\n

我需要为 SqlQuery 设置其他内容吗?

\n
\n

我建议创建另一个对象,该对象仅具有与过程的预期结果匹配/映射的属性,并将其用作该过程的通用参数SqlQuery

\n