コネクタの最新の開発バージョンである 6.3.3 ベータ版を使用して、VS2010 の Entity Framework 4 経由で mysql データベースに接続しています。
クエリで TIMESTAMP 列 (createdDate) を使用する次の Linq ステートメントがあります。コードは次のとおりです。
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 at MySql.Data .Types.MySqlDateTime.MySql.Data.Types.IMySqlValue.WriteValue(MySqlPacket パケット、ブール バイナリ、オブジェクト値、Int32 の長さ)\r\n で MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket パケット、ブール バイナリ、MySqlConnectionStringBuilder 設定)\r\n MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection パラメーター、MySqlPacket パケット、文字列 parmName) で\r\n MySql.Data.MySqlClient.Statement.InternalBindParameters(文字列 sql、MySqlParameterCollection パラメーター、MySqlPacket パケット) で\ MySql.Data.MySqlClient.Statement.BindParameters() で r\n\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
DateTimeOffset の代わりに DateTime を宣言することによって:
DateTime cutoffTime = DateTime.Now.AddMinutes(-timeThreshold);
...
var unprocessedMessages = from m in context.messages
where m.createdDate.DateTime <= cutoffTime
select m;
.createdDate.DateTime の形式を使用しますが、Entity Framework はそれを好まず、例外を返します。
指定された型メンバー 'DateTime' は、LINQ to Entities ではサポートされていません
これは、以前のバージョンの NET/Connector のバグとして報告されました。
GA バージョン 6.3.4 でこの問題が修正されることを願っていますが、6.3.3 ベータ版でも問題は解決していません。