我正在使用连接器的最新开发版本 - 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 测试版中。