ENUM и IncorrectFormat

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Закрыто
kacuro
Сообщения: 2
Зарегистрирован: Чт 04 апр 2013 08:22

ENUM и IncorrectFormat

Сообщение kacuro » Чт 04 апр 2013 08:45

Эмпирически доказано, что при чтении из БД падает "десериализация" enum.
Использую LinqConnect 4.1 Trial

Пример:

Код: Выделить всё

public enum Status
{
    Status1,
    Status2
}

[Table(Name = "test")]
[DebuggerDisplay("A={StatusA} B={StatusB} {Id}")]
public sealed class Wrapper
{
    private Status _statusA;
    private Status _statusB;

    public Wrapper()
    {
        _statusA = Status.Status1;
        _statusB = Status.Status2;
    }

    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert, UpdateCheck = UpdateCheck.Never)]
    public Int32 Id { get; set; }

    [Column(CanBeNull = false, AutoSync = AutoSync.Never, UpdateCheck = UpdateCheck.Never)]
    public String StatusA
    {
        get { return _statusA.ToString(); }
        set { _statusA = (Status) Enum.Parse(typeof (Status), value, true); }
    }

    [Column(CanBeNull = false, AutoSync = AutoSync.Never, UpdateCheck = UpdateCheck.Always, DbType = "VARCHAR(45) NOT NULL")]
    public Status StatusB
    {
        get { return _statusB; }
        set { _statusB = value; }
    }
}
В БД сохраняется ОК.
А при чтении (например, .Where(item => item.StatusB == Status.Status1).ToArray();) выдаёт "IncorrectFormat"

Код: Выделить всё

   at Devart.Common.ad.aj(Byte[] A_0, Int32 A_1, Int32 A_2)
   at Devart.Common.ad.ar(Byte[] A_0, Int32 A_1, Int32 A_2)
   at Devart.Common.ad.b(Byte[] A_0, Int32 A_1, Int32 A_2)
   at Devart.Data.MySql.c.b(Byte[] A_0, Int32 A_1, Int32 A_2)
   at Devart.Data.MySql.MySqlDataReader.GetInt32(Int32 i)
   at MaterializeWrapper(MaterializerScope )
   at Devart.Data.Linq.Engine.ObjectReader`1.a()
   at Devart.Data.Linq.Engine.EntityReader`3.a()
   at Devart.Data.Linq.Engine.ObjectReader`1.a(T& A_0)
   at Devart.Data.Linq.Engine.ObjectReader`1.c()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at DevartTest.Program.Main(String[] args) in D:\home\Projects\sellobuy\DevartTest\Program.cs:line 98
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
Проблема создаёт некоторые неудобства. Возможно ли её решить каким-либо шаманством в маппинге или ещё где?

MariiaI
Devart Team
Сообщения: 3
Зарегистрирован: Пн 08 апр 2013 10:05

Re: ENUM и IncorrectFormat

Сообщение MariiaI » Пн 08 апр 2013 10:36

Мы не смогли воспроизвести данную ошибку. Мы отсылаем Вам наш тестовый пример на адрес почты, который Вы указали при регистрации на форуме. Пожалуйста, проверьте, что письмо не блокируется Вашим почтовым фильтром.
Измените наш проект так, чтобы данная ошибка воспроизводилась, и пришлите его обратно, либо пришлите нам свой пример.
Также, пожалуйста, пришлите скрипты создания таблиц, с которыми Вы работаете.

MariiaI
Devart Team
Сообщения: 3
Зарегистрирован: Пн 08 апр 2013 10:05

Re: ENUM и IncorrectFormat

Сообщение MariiaI » Вт 09 апр 2013 11:01

Мы получили Ваш проект и по-прежнему данная ошибка не воспроизводится ( с версиями LinqConnect 4.1.82 и 4.2.222).
Пожалуйста потдвердите следующее:
1) типы в базе данных
- Id INT(10) NOT NULL AUTO_INCREMENT
- StatusA VARCHAR(45) NOT NULL
- StatusB VARCHAR(45) NOT NULL
2) типы .NET/MySQL в модели
- Id Int32/INT(10) NOT NULL
- StatusA String/ VARCHAR(45) NOT NULL
- StatusB Status/ VARCHAR(45) NOT NULL
3) данные в базе хранятся в виде

Код: Выделить всё

Id StatusA StatusB
-- ------- -------
1 StatusB StatusA
Также, пожалуйста, уточните версию MySQL сервера и его настройки (например, результат выполнения 'show variables').

Закрыто