EF在SqlQuery中生成“不支持指定的方法”错误

时间:2013-05-15 07:38:15

标签: c# entity-framework-5

我目前正在使用Entity Framework 5 我试过编写以下代码:

var result = context.Database.SqlQuery<Entity>("SELECT * FROM ref.Entity");

但是我收到以下错误:

Specified method is not supported.

有人能告诉我这个问题的决议吗?

堆栈跟踪

  

“在EFProviderWrapperToolkit.DbConnectionWrapper.CreateDbCommand()\ r \ n at System.Data.Common.DbConnection.CreateCommand()\ r \ n在System.Data.Objects.ObjectContext.CreateStoreCommand(String commandText,Object []参数)\ r \ n在System.Data.Objects.ObjectContext.ExecuteStoreQueryInternal [TElement](String commandText,String entitySetName,MergeOption mergeOption,Object [] parameters)\ r \ n在System.Data.Objects.ObjectContext.ExecuteStoreQuery [TElement] (String commandText,Object []参数)\ r \ n在System.Data.Entity.Internal.InternalContext.ExecuteSqlQuery [TElement](String sql,Object []参数)\ r \ n在System.Data.Entity.Internal处。 InternalContext.ExecuteSqlQueryAsIEnumerable [TElement](String sql,Object [] parameters)\ r \ n在System.Data.Entity.InternalContext.ExecuteSqlQuery(Type elementType,String sql,Object [] parameters)\ r \ n在System。 System.Data.Entity.Internal.InternalSqlQuery 1.GetEnumerator()\r\n at System.Linq.SystemCore_EnumerableDebugView中的Data.Entity.Internal.InternalSqlNonSetQuery.GetEnumerator()\ r \ n 1.get_Items()“

2 个答案:

答案 0 :(得分:2)

这在codeplex“社区实体框架提供程序包装器”site的“已知问题”部分中提到。举例:

  

不支持使用ObjectContext.ExecuteStoreCommand或ObjectContext.ExecuteStoreQuery等方法直接执行存储命令。但是,您可以使用以下代码从数据库连接创建DbCommand:

    using EFProviderWrapperToolkit;
    ...
    context.Connection.GetStoreConnection().CreateCommand()

答案 1 :(得分:1)

答案很简单。我不确定你是否有EFProviderWrapperToolkit的源代码,你应该得到它并看看它。您会注意到DbConnectionWrapper继承自DbConnection,它会覆盖CreateDbCommand方法但不提供任何功能,而是抛出异常。

/// <summary>
        /// Creates and returns a <see cref="T:System.Data.Common.DbCommand"/> object associated with the current connection.
        /// </summary>
        /// <returns>
        /// A <see cref="T:System.Data.Common.DbCommand"/> object.
        /// </returns>
        protected override DbCommand CreateDbCommand()
        {
            throw new NotSupportedException();
        }