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)。

谢谢你的帮助!