Вопрос

У 2 баз данных MySQL. Одной является основная база данных, другая используется для данных геолокации. Теперь, чтобы дозвуковую игру приятно с созданными файлами через подкомандер я сделал его простым и просто создал представление, которое отображает данные геолокации в другой базе данных (таким образом, все таблицы и данные геолокации технически в одной базе данных).

Теперь проблема, в которой я работаю в том, в таблице геолокации есть 2 поля (широта, долгота), которые имеют оба плавательства.

Когда я запускаю стандартное подземное утверждение, чтобы получить данные:

return new Select()
            .From(ZipDatum.Schema)
            .Where(ZipDatum.Columns.Zipcode).IsEqualTo(zipCode)
            .ExecuteSingle<ZipDatum>();

Я получаю это исключение в моем проекте тестов: «TestCangetzipdata» не удалось: System.arGumentException: объект типа «System.single» не может быть преобразован в тип «System.Decimal».

Похоже, что дозвуковыжимаются полей Float до десятичных. Но это исключение бросает меня на петлю. Любой способ обойти это? FWIW, на всех остальных 200 столах 200+ мы используем десятичные для наших полей, которые требуют таких. Но поскольку это 3-я сторонняя таблица базы данных, они используют Float и это вызывает проблемы.

Кто-нибудь столкнулся с этой ситуацией?

Это было полезно?

Решение

Одно решение было бы использовать метод ExecuteTyPedList.

  1. Вы должны создать класс DTO:

    public class ZipDatumHelperClass
    {
        public int Id {get;set;}
        public string ZipCode {get;set;}
        public single Latitude {get;set;}
        public single Longitude {get;set;}
    }
    
  2. Перепишите свой запрос к

    List<ZipCodeHelperClass> result = new Select()
        .From(ZipDatum.Schema)
        .Where(ZipDatum.Columns.Zipcode).IsEqualTo(zipCode)
        .ExecuteTypedList<ZipDatumHelperClass>();
    

Метод ExecuteTypedList является очень общим подходом, поскольку он пытается сопоставить столбцы от VatAreader к свойствам вашего класса. Это очень специфично, так как это

чувствительный к регистру
B Ваши свойства должны соответствовать именному типу системного, полученного по DataReader

Просто пусть ваш тест запускается и измените результат, пока не получите никаких ошибок.

Другое решение было бы изменением дозвукового источника для генерации типа системы Single для видов MySQL типа.

https://github.com/subsonic/subsonic--.0/blob/master/subsonic/dataProviders/mysqldataProvider.cs.

public override DbType GetDbType(string mySqlType) { }

Получайте dbtype из mysqltype (десятичное десятичное время создано для десятичных, поплавок, newdecimal, числовых, двойных, реальных). Вы должны выяснить, какой здесь неправильный, и вместо этого вернуть dbtype.single.

https://github.com/subsonic/subsonic--.0/blob/master/subsonic/utity.cs.

public static string GetSystemType(DbType dbType) { }

FYI: получите систему .Type для указанного dbtype. Вы не должны изменять это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top