我对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系统环境(没有'@'),每次都有相同的结果。
任何帮助将不胜感激! 谢谢。
答案 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'")