0

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

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

例如

SET @my_var = '测试';

在 Mysql 下我没有任何问题。

以下引发EntityFrameworkException('@' 附近的语法错误)。

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

或者

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

最后一个方法引发了一个 MySQLException,表示 DataReader 已经打开并且需要关闭。

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

我还尝试设置一个 MySQL 系统环境(没有'@'),每次都具有相同的结果。

任何帮助都感激不尽 !谢谢你。

4

2 回答 2

2

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

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

但是您需要Allow User Variables=True在 MySQL 连接字符串中进行设置 (参考:是否可以在 .NET MySqlCommand 中使用 MySql 用户定义变量?

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

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

感谢您的帮助 !

于 2013-04-03T09:52:41.630 回答
0

由于您的语句不是查询(即不返回任何结果),您应该使用ExecuteStoreCommand. 像这样的东西应该工作:

ctx.ExecuteStoreCommand("SET @my_var = 'test'")
于 2013-04-02T17:50:06.700 回答