C# 不存在从ObjectParameter到已知托管提供程序本机类型的映射

C# 不存在从ObjectParameter到已知托管提供程序本机类型的映射,c#,sql,arrays,wcf,entity-framework,C#,Sql,Arrays,Wcf,Entity Framework,我正在使用EF为Microsoft SQL Server构建WCF服务,但不断出现以下错误: 其他信息:不存在从对象类型System.Data.Objects.ObjectParameter到已知托管提供程序本机类型的映射 关于此查询: string ID = "XXID"; string Sql = @"SELECT * FROM @Table WHERE " + ID + " LIKE '@SearchTerm'"; ObjectParameter[] Parameters = new Ob

我正在使用EF为Microsoft SQL Server构建WCF服务,但不断出现以下错误:

其他信息:不存在从对象类型System.Data.Objects.ObjectParameter到已知托管提供程序本机类型的映射

关于此查询:

string ID = "XXID";
string Sql = @"SELECT * FROM @Table WHERE " + ID + " LIKE '@SearchTerm'";
ObjectParameter[] Parameters = new ObjectParameter[2];
Parameters[0] = new ObjectParameter("Table", Table);
Parameters[1] = new ObjectParameter("SearchTerm", SearchTerm);

using (var Context = new XXEntities())
{
    Context.Database.Connection.Open();
    IEnumerable<string> Query = Context.Database.SqlQuery<string>(Sql, Parameters);

    string[] Results = Query.ToArray();
    Context.Database.Connection.Close();
    return Results; 
}
string ID=“XXID”;
字符串Sql=@“从@Table中选择*,其中“+ID+”类似于“@SearchTerm”;
ObjectParameter[]参数=新的ObjectParameter[2];
参数[0]=新的ObjectParameter(“表”,表);
参数[1]=新的ObjectParameter(“SearchTerm”,SearchTerm);
使用(var Context=new XXEntities())
{
Context.Database.Connection.Open();
IEnumerable Query=Context.Database.SqlQuery(Sql,参数);
string[]Results=Query.ToArray();
Context.Database.Connection.Close();
返回结果;
}

我已经在SQL Server上测试了该查询,它按预期工作-返回匹配ID的记录。

尝试使用对象参数的SQL参数instaed

IEnumerable<string> Query = Context.Database.SqlQuery<string>(Sql, 
new SqlParameter("Table", Table), 
new SqlParameter("SearchTerm", SearchTerm));
IEnumerable Query=Context.Database.SqlQuery(Sql,
新的SqlParameter(“Table”,Table),
新的SqlParameter(“SearchTerm”,SearchTerm));
从理论上讲,您可以不需要任何像这样的发送参数来操作sql

IEnumerable<string> Query = Context.Database.SqlQuery<string>("SELECT * FROM "+Table+" WHERE " + ID + " LIKE '"+SearchTerm+"'");
IEnumerable Query=Context.Database.SqlQuery(“从“+Table+”中选择*,其中“+ID+”类似“+SearchTerm+””);

谢谢。我将其更改为SqlParameters,但现在出现以下错误:“数据读取器有多个字段。多个字段对EDM基元或枚举类型无效。”??谢谢。我只记得在它之前我有一个新的错误,因为数据与数组不兼容。回到原始错误,我可以问一下ObjectParameter和SqlParameter之间的区别吗?再次感谢。如果您通过EF调用存储过程,您将传递对象参数,在您的情况下,您将调用sql,以便传递sqlDo,而不是使用第二种字符串连接方式。它容易受到SQL注入的影响,而SQL注入正是使用参数的关键所在。