Я использую последнюю версию разработки соединителя - 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.
Вы пытаетесь удалить DateTime из m.createdDate.DateTime в своем последнем запросе? – Nix
Возможный дубликат исключения [Entity Framework 4 исключение не было брошено/поймано] (http: // stackoverflow.com/questions/3505616/entity-framework-4-exception-not-being-throw-catch) –
Nix, мой исходный запрос (первое окно блока кода) имеет DateTime, удаленную из m.createdDate.DateTime. Я экспериментировал с добавлением его на основе предложения, которое я видел на форумах mysql –