0

我遇到了實體框架5.0的問題。我正在使用Silverlight 5和MySQL 5.6。實體框架:設置MySQL自定義環境變量

我需要每一個聯接到MySQL服務器之前設置環境變量的MySQL。

E.g

SET @my_var = '測試';

在mysql的,我沒有任何問題。

以下提出了EntityFrameworkException('@'附近的語法錯誤)。

this.ObjectContext.CreateQuery<object>(" SET @my_var = 'test' "); 

OR

this.ObjectContext.CreateQuery<object>(" CALL set_my_var('test') "); 

這最後的方法提出了一個個MySqlException說,一個DataReader已經打開,並且需要關閉。

this.ObjectContext.ExecuteStoreQuery<object>(" CALL set_my_var('test') ", null); 

我也試圖與每一次相同的結果(無「@」)設置一個MySQL的系統環境。

任何幫助將不勝感激! 謝謝。

回答

0

因爲你的語句不是查詢(即不返回任何結果),你應該使用ExecuteStoreCommand。像這樣的東西應該工作:

ctx.ExecuteStoreCommand("SET @my_var = 'test'") 
+0

你好。 謝謝你的回答。 我也嘗試過這種方法,但MySQL引發了一個異常:「必須定義@my_var」。 我不知道如何逃避'@'字符。 我也試過使用存儲過程來設置這個變量。沒有例外。但似乎變量從未設置。 我應該在我的上下文中手動打開MySQL服務器的連接嗎? 我讀過這篇文章,實體框架根據需要打開和關閉連接多次:http://msdn.microsoft.com/en-us/library/vstudio/bb896325%28v=vs.100%29.aspx – Frank

+0

您是否認爲執行此方法實體框架會爲此命令打開一個連接? 我試圖這樣做。我將連接指令添加到Initialize方法(overriden)中。 我試圖把這條指令放到我正在使用的「插入」方法中,但該變量不是。 目前沒有變化。 – Frank

1

我嘗試了許多事情,我拼錯我的變量在我的代碼。 因此,以下finaly工作:ctx.ExecuteStoreCommand("SET @my_var = 'test'");

我決定離開我的域名服務的方法Initialize指令。該方法繼承了LinqToEntitiesDomainService類。

但你需要設置Allow User Variables=True你的MySQL連接字符串中 (參考:Is it possible to use a MySql User Defined Variable in a .NET MySqlCommand?

您只需因爲老版本使用「@」標誌來定義使用最近的MySQL連接的版本SQL參數,所以它可能會與自定義變量衝突。現在它使用'?'馬克:http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html

我的圖書館已經是最新的(6.6.5)。

謝謝你的幫助!