Отображение BigInt на модели с INT - PullRequest
0 голосов
/ 07 марта 2020

У меня есть таблица в базе данных, в которой есть столбец BigInt. Данные в этой таблице никогда не превысят INT.

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

Могу ли я сопоставить BigInt с моделью с INT?

Я попытался:

 var converter = new ValueConverter<int, long>(
            v => v,
            v => (int)v);

и вызвать HasConversion(converter) в Fluent Api

Но поймать:

System.InvalidCastException: Невозможно выполнить приведение объект типа

'System.Int32' для типа 'System.Int64'.

Если я меняю типы:

System.InvalidOperationException: Converter для типа модели «long» нельзя использовать для «DocumentRequest.Id», поскольку его тип - «int».

=> первый параметр действителен

Я бы сделал в Int64 модель, но в основной таблице может быть идентификатор BigInt, а у детей ссылка Внешнего ключа как INT => отображение не работает ...

Черт бд ...

1 Ответ

1 голос
/ 07 марта 2020

Это причуда C#. Вы не можете на самом деле приводить между этими типами, но у них есть Операторы приведения для выполнения преобразования. Например,

    long l = 0;
    Int32 i = (Int32)l; //works

    Int32 i2 = (Int32)(object)l; //fails System.InvalidCastException: 'Unable to cast object of type 'System.Int64' to type 'System.Int32'.'

Исправление заключается в простом использовании преобразования вместо преобразования C#. EG

    var converter = new ValueConverter<int, long>(
            i => Convert.ToInt64(i),
            l => Convert.ToInt32(l));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...