Объект типа «System.UInt16» не может быть преобразован в тип «System.Int16» - PullRequest
0 голосов
/ 22 июля 2009

Почему у меня возникает эта ошибка «Объект типа« System.UInt16 »не может быть преобразован в тип« System.Int16 »при попытке запустить ниже кода

 public ActionResult List()
 {
     var x = account.All();
     return View(x);
 }

Обнаружены ошибки при попытке выполнить итерацию моей модели в файле List.aspx (код ниже).

  <% foreach (var item in Model) { %>

Я использую Subsonic 3.0.3 и базу данных MySQL. Ниже приведены описания моей учетной записи

acc_id          smallint(5)        unsigned pri
acc_type        smallint(5)        unsigned
acc_status      tinyint(3)         unsigned
acc_balance     int(11)            unsigned

Нужно ли что-то изменить в MySQL.ttinclude, чтобы эта штука работала?

Ответы [ 5 ]

1 голос
/ 22 июля 2009

Не зная, что делают account.All() или View(x), это довольно сложно понять. Это помогло бы, если бы вы использовали явную типизацию и для x.

Я предполагаю, что что-то распаковывается в short вместо ushort, но мы не можем действительно отличить только этот фрагмент кода. Я предполагаю, что это исключение, а не ошибка во время компиляции? Больше информации, пожалуйста!

0 голосов
/ 06 октября 2009

Изменение свойств для неподписанных столбцов в ActiveRecord.cs с int или? Int на uint и? Uint частично решит проблему.

0 голосов
/ 27 июля 2009

Я сделал форк из Subsonic3 Templates for MySQL. В моем форке я изменил так, чтобы он мог поддерживать типы данных MySQL без знака, что решило мой собственный вопрос: D, пожалуйста, проверьте это, http://github/funky81

0 голосов
/ 27 июля 2009

У меня точно такая же проблема с SubSonic 3 и MySQL - единственный способ обойти это - изменить определение таблицы MySQL, чтобы использовать подписанные столбцы, а не беззнаковые.

Если вам нужен дополнительный диапазон, вы всегда можете использовать bigint (хотя я считаю, что это влияет на производительность 32-битных процессоров).

0 голосов
/ 22 июля 2009

Чрезвычайно сложно дать ответ на основе предоставленного вами кода. Вы не говорите, какая строка дает ошибку или где проблема. Однако, проверьте класс Convert в C #, если проблема в C #, а не в вашей БД или Subsonic, то я думаю, что Convert сделает свое дело.

ushort num1 = some_number;

короткий номер2;

num2 = Convert.ToUInt16 (num1);

Однако, очень трудно понять значение этого преобразования, вы должны знать, что это может сломать что-то еще позже.

...