3

コネクタの最新の開発バージョンである 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 ベータ版でも問題は解決していません。

4

1 に答える 1

1

これは LINQ to Entities の問題です。クエリでそのようなプロパティ/メソッドを使用することはできません... DateTime だけでなく、他のものについても同様です。

別の変数で値を取得し、その変数を次のようにクエリで使用します

DateTime dt=createdDate.DateTime;

または、DateTimeを削除するだけです...値が同じであるため...例外を取り除く必要があります.しかし、あなたが何を達成しようとしているのかわかりません...

于 2010-08-18T16:26:31.527 に答える