【问题标题】:Entity Framework : Set MySQL custom environment variables实体框架:设置 MySQL 自定义环境变量
【发布时间】:2013-03-23 21:21:51
【问题描述】:

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

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

例如

SET @my_var = 'test';

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你好。谢谢您的回答。我也尝试过这种方法,但是 MySQL 引发了一个异常:@my_var must be defined。我不知道如何转义“@”字符。我也尝试过使用存储过程来设置这个变量。没有例外。但似乎从未设置变量。我应该在我的上下文中手动打开与 MySQL 服务器的连接吗?我在本文中读到实体框架根据需要多次打开和关闭连接:msdn.microsoft.com/en-us/library/vstudio/…
    • 你认为执行这个方法 Entity Framework 会为这个命令打开一个连接吗?我试着这样做。我将连接指令添加到 Initialize 方法中(被覆盖)。我试图将此指令放入我正在使用的“插入”方法中,但变量不是。暂时没有变化。
    【解决方案2】:

    我尝试了很多东西,以至于我在代码中拼错了我的变量。 所以以下最终工作: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 连接器,因为旧版本使用“@”标记来定义 SQL 参数,因此它可能与自定义变量发生冲突。现在它使用“?”标记:http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html

    我的库已经是最新的 (6.6.5)。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      相关资源
      最近更新 更多