SimpleRepository Булева задача отображения - PullRequest
1 голос
/ 16 июля 2009

Я использую SubSonic (v3.0.0.3), чтобы сделать простое сопоставление объектов с SimpleRepository и SQLite. Все отлично работает со свойствами типа string, DateTime, Guid и int. Когда я пытаюсь добавить свойство bool (или логическое) к объекту, я могу добавить его в базу данных, но когда я пытаюсь получить его, я получаю следующее сообщение об ошибке:

"Объект типа 'System.Byte' не может быть преобразован в тип 'System.Boolean'."

Я пытался получить данные несколькими разными способами. Вот несколько примеров (которые работают, когда рассматриваемый объект не имеет каких-либо свойств bool):

var myObjs = repo.All<MyObj>();

OR

var myObjs = from m in repo.All<MyObj>()
    orderby m.Title
    select m;

Я не уверен, является ли это ошибкой или я делаю что-то не так. Кто-нибудь еще может сопоставить этот тип данных с SQLite, используя SimpleRepository?

Спасибо!
C

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

Исправил это для себя, не уверен, что это ошибка в дозвуковой, но копался в источнике, чтобы найти исправление.

Возьмите дозвуковой источник из github и откройте

дозвуковой 3.0 \ SubSonic.Core \ SQLGeneration \ Schema \ SQLiteSchema.cs

   public override string GetNativeType(DbType dbType)
    {
        switch(dbType)
        {
            case DbType.Object:
            case DbType.AnsiString:
            case DbType.AnsiStringFixedLength:
            case DbType.String:
            case DbType.StringFixedLength:
                return "nvarchar";
            case DbType.Boolean:
                return "boolean"; // <-- This was set to "tinyint"
            case DbType.SByte:
            case DbType.Binary:
            case DbType.Byte:
                return "longblob";
            case DbType.Currency:
                return "money";

...

Обратите внимание, что, где я прокомментировал, Subsonic теперь отображает .net DbType в тип SqlLite «boolean» вместо «tinyint». Перестройте в режиме выпуска, возьмите новый SubSonic.Core.dll и замените его.

Если вы не знакомы с git, я могу добавить некоторые инструкции по быстрому клонированию через cygwin. Если у вас нет времени для этого, я могу дать вам dll, который я использую сейчас, однако это простое изменение, и всегда лучше изменить его самостоятельно, чем брать скомпилированную dll из неизвестного;)

0 голосов
0 голосов
/ 19 августа 2009

У меня тоже была эта проблема, и я нашел ее.

В SQLite.ttinclude функции GetDbType () логическое значение не определено.

просто добавьте это в переключатель

case "boolean": вернуть DbType.Boolean;

и снова должно работать; D

...