实体框架:设置MySQL自定义环境变量

时间:2013-04-02 14:19:44

标签: mysql entity-framework environment-variables entity-framework-5 silverlight-5.0

我对Entity Framework 5.0存在问题。我也在使用Silverlight 5和MySQL 5.6。

我需要在每次连接到MySQL服务器之前设置一个环境MySQL变量。

E.g

  

SET @my_var ='test';

在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系统环境(没有'@'),每次都有相同的结果。

任何帮助将不胜感激! 谢谢。

2 个答案:

答案 0 :(得分:1)

我尝试了很多东西,我在代码中拼错了我的变量。 所以下面的最终结果是:ctx.ExecuteStoreCommand("SET @my_var = 'test'");

我决定将该指令留在我的域名服务的Initialize方法中。此方法继承自LinqToEntitiesDomainService类。

但您需要在MySQL连接字符串中设置Allow User Variables=True (参考:Is it possible to use a MySql User Defined Variable in a .NET MySqlCommand?

您只需使用最新版本的MySQL Connector,因为旧版本使用“@”标记来定义SQL参数,因此它可能与自定义变量冲突。现在它使用'?' mark:http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html

我的图书馆已经是最新的(6.6.5)。

感谢您的帮助!

答案 1 :(得分:0)

由于您的陈述不是查询(即不返回任何结果),您应该使用ExecuteStoreCommand。这样的事情应该有效:

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