3

Я использую последнюю версию разработки соединителя - 6.3.3 beta для подключения к базе данных mysql через Entity Framework 4 в VS2010.Указанный член типа 'DateTime' не поддерживается в LINQ to Entities

У меня есть следующий оператор 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, логическое двоичное значение, значение объекта, длина Int32) \ r \ n на MySql.Data.MySqlClient.MySqlParameter.Serialize (пакет MySqlPacket, логические двоичные файлы, настройки MySqlConnectionStringBuilder) \ r \ n на MySql.Data.MySqlClient.Statement.SerializeParameter (параметры MySqlParameterCollection, пакет MySqlPacket, строка parm Имя) \ 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)»

Я пытался следовать советам по следующей ссылке: 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 не любит его и возвращает обратно исключение:

Указанный тип член «DateTime» не поддерживается в LINQ для лиц


Об этом сообщается как ошибка в предыдущих версиях NET/Connector.

Надеюсь, версия GA.3 6.3.4 исправит эту проблему, но она по-прежнему сохраняется в бета-версии 6.3.3.

+0

Вы пытаетесь удалить DateTime из m.createdDate.DateTime в своем последнем запросе? – Nix

+0

Возможный дубликат исключения [Entity Framework 4 исключение не было брошено/поймано] (http: // stackoverflow.com/questions/3505616/entity-framework-4-exception-not-being-throw-catch) –

+0

Nix, мой исходный запрос (первое окно блока кода) имеет DateTime, удаленную из m.createdDate.DateTime. Я экспериментировал с добавлением его на основе предложения, которое я видел на форумах mysql –

ответ

1

Ну, это проблема LINQ to Entities..it не позволяет использовать свойства/методы, подобные этому в запросе ... не только для DateTime, но и для других.

Получить значение в другой переменной и использовать эту переменную в запросе, как

DateTime dt=createdDate.DateTime;

Или просто удалить DateTime ... потому что это значение такое же ... что должен избавиться от исключения. Но я не уверен, чего вы пытаетесь достичь, хотя ...

+0

Misnomer, я не думаю, что можно получить значение в другой переменной и использовать переменную в запросе - значение нужно сравнивать для каждой записи. То, что я пытаюсь сделать: Получить все записи из таблицы сообщений, значение createDate (m.createdDate), определенная как столбец TIMESTAMP в базе данных MySql), не старше 5 минут с текущего времени (cutoffTime) –

+0

какой формат создан? Укажите? это как «2009-06-18 18: 42: 19.030»? – Vishal

+0

Это: «2010-08-16 16:59:24» –

Смежные вопросы