Как использовать Dapper при использовании Dapper, когда он хранится как один символ? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть перечисление, определенное как -

    public enum MarkUpCalculationType
    {
        Percentage,
        Fixed
    }

Эти значения хранятся в базе данных как отдельные значения («P» для процента и «F» для фиксированного значения).Данные извлекаются из базы данных с использованием хранимой процедуры, аналогичной приведенной ниже -

    SELECT
        M.MarkUpType AS MarkUpCalculationType,
        -- Other selected values
    FROM
        dbo.MarkUp M
        -- some joins

. В исходной версии моего кода он будет принимать возвращаемый символ и устанавливать для свойства соответствующее значение перечисления.

Теперь я изменил код для использования Dapper, но выдает ошибку при попытке проанализировать значение перечисления -

Ошибка анализа столбца 15 (MarkUpCalculationType = P - String)

Я пытался использовать обработчик нестандартного типа, но, глядя на эту проблему github , похоже, что она не будет фиксированной в главном Dapperпроект (и, честно говоря, я согласен с оговорками Марка Гравелла к его исправлению )

1 Ответ

2 голосов
/ 11 июня 2019

Если вы можете немного изменить перечисление и хранимую процедуру, вы можете сделать следующее:

Изменить перечисление, чтобы добавить однобуквенный код к каждому перечислению -

    public enum MarkUpCalculationType
    {
        Percentage = 'P',
        Fixed = 'F'
    }

Сейчас, поскольку перечисления не могут быть напечатаны как символы, "P" и "F" фактически представлены их кодами ASCII (80 и 70 соответственно).Вы также можете написать это так -

    public enum MarkUpCalculationType
    {
        Percentage = 80,
        Fixed = 70
    }

Хотя использование фактических значений символов облегчает чтение кода, а связь между значениями перечисления и значениями базы данных становится более ясной.

Теперь, если выизмените вашу хранимую процедуру так, чтобы она возвращала ASCII-код персонажа. Dapper должен уметь правильно анализировать ваше перечисление -

    SELECT
        ASCII(MV.MarkUpType) AS MarkUpCalculationType,
        -- Other selected values
    FROM
        dbo.MarkUp M
        -- some joins
...