Указанный член типа DateTime не поддерживается в LINQ to Entities - PullRequest
3 голосов
/ 18 августа 2010

Я использую последнюю версию разработки коннектора - бета-версию 6.3.3 для подключения к базе данных mysql через Entity Framework 4 в VS2010.

У меня есть следующий оператор Linq, который использует столбец TIMESTAMP - createDate - в запросе. Вот код:

        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 \ at MySql.Data.Types.MySqlDateTime.MySql.Data.Types.IMySqlValue. , Параметры MySqlConnectionStringBuilder) \ r \ n в MySql.Data.MySqlClient.Statement.SerializeParameter (параметры MySqlParameterCollection, пакет MySqlPacket, String parmName) \ r \ n в параметрах MySql.Data.MySqletaraction.Player.Player.Player.Player.Player.Player.Player. пакет) \ 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 поведение vior) \ r \ n в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (поведение CommandBehavior) \ r \ n в MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader (поведение CommandBehavior). dom .omom в системе .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 to Entities


Это сообщалось как ошибка в предыдущих версиях NET / Connector.

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

1 Ответ

1 голос
/ 18 августа 2010

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

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

DateTime dt=createdDate.DateTime;

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

...