2014-04-08 72 views
2

我在建築使用EF到Microsoft SQL Server中的WCF服務,但不斷收到以下錯誤的過程:沒有映射從ObjectParameter存在一個已知的託管提供原生型

Additional information: No mapping exists from object type System.Data.Objects.ObjectParameter to a known managed provider native type.

在此查詢:

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; 
} 

我測試了SQL Server上的查詢,它按預期工作 - 返回匹配的ID的記錄。

回答

7

嘗試使用SQL參數instaed對象參數

IEnumerable<string> Query = Context.Database.SqlQuery<string>(Sql, 
new SqlParameter("Table", Table), 
new SqlParameter("SearchTerm", SearchTerm)); 

的理論上你可以操縱SQL,而不需要任何發送的參數,如本

IEnumerable<string> Query = Context.Database.SqlQuery<string>("SELECT * FROM "+Table+" WHERE " + ID + " LIKE '"+SearchTerm+"'"); 
+0

謝謝。我將其更改爲SqlParameters,但現在出現以下錯誤:「數據讀取器有多個字段,多個字段對於EDM基元或枚舉類型無效。」 ?? – TheIdiot

+0

看到新的編輯 –

+0

謝謝。我只記得我之前有過新的錯誤,因爲數據與數組不兼容。回到原始錯誤,我可以問一下ObjectParameter和SqlParameter有什麼不同?再次感謝。 – TheIdiot

相關問題