3

我正在使用连接器的最新开发版本 - 6.3.3 beta 通过 VS2010 中的实体框架 4 连接到 mysql 数据库。

我有以下 Linq 语句,它在查询中使用 TIMESTAMP 列-createdDate。这是代码:

        int timeThreshold = 5;
        DateTimeOffset cutoffTime = DateTime.Now.AddMinutes(-timeThreshold);

        using (var context = new opusismEntities())
        {
            var unprocessedMessages = from m in context.messages
                                      where m.createdDate <= cutoffTime
                                      select m;
            try
            {
                foreach (var message in unprocessedMessages)
                {
                    int gfff = 5;
                }
            }
            catch (Exception e)
            {
                string exceptionString = e.InnerException.ToString();
            }

        }

CLR 抛出以下异常:

“MySql.Data.MySqlClient.MySqlException (0x80004005): 在命令执行期间遇到致命错误。---> MySql.Data.MySqlClient.MySqlException (0x80004005): 无法序列化日期/时间值。\r\n 在 MySql.Data .Types.MySqlDateTime.MySql.Data.Types.IMySqlValue.WriteValue(MySqlPacket packet, Boolean binary, Object value, Int32 length)\r\n 在 MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket packet, Boolean binary, MySqlConnectionStringBuilder 设置)\r\n 在 MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection 参数, MySqlPacket 数据包, String parmName)\r\n 在 MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection 参数, MySqlPacket 数据包)\ r\n 在 MySql.Data.MySqlClient.Statement.BindParameters()\r\n 在 MySql.Data.MySqlClient.Statement。Execute()\r\n 在 MySql.Data.MySqlClient.PreparableStatement.Execute()\r\n 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 MySql.Data.MySqlClient.MySqlCommand。 ExecuteReader(CommandBehavior 行为)\r\n 在 MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior 行为)\r\n 在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 System.Data。 EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior 行为)"ExecuteDbDataReader(CommandBehavior 行为)\r\n 在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior 行为)"ExecuteDbDataReader(CommandBehavior 行为)\r\n 在 System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior 行为)"

我试图遵循以下链接的建议: http ://bugs.mysql.com/bug.php?id=52550

通过声明 DateTime 而不是 DateTimeOffset:

DateTime cutoffTime = DateTime.Now.AddMinutes(-timeThreshold);

...
var unprocessedMessages = from m in context.messages
                                      where m.createdDate.DateTime <= cutoffTime
                                      select m;

并使用 .createdDate.DateTime 格式,但 Entity Framework 不喜欢它并返回异常:

LINQ to Entities 不支持指定的类型成员“DateTime”


这被报告为以前版本的 NET/Connector 中的错误。

希望 GA 版本 6.3.4 能解决这个问题,但它仍然存在于 6.3.3 测试版中。

4

1 回答 1

1

好吧,这是 LINQ to Entities 问题..它不允许您在查询中使用类似的属性/方法...不仅适用于 DateTime,也适用于其他人。

获取另一个变量中的值并在查询中使用该变量,例如

DateTime dt=createdDate.DateTime;

或者只是删除 DateTime ......因为它的价值是相同的......应该摆脱异常。但我不确定你想要实现什么......

于 2010-08-18T16:26:31.527 回答