为什么我遇到此错误“当我尝试在代码下运行时,无法将类型为'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中的内容才能使这个功能正常工作?
答案 0 :(得分:1)
在不知道account.All()
或View(x)
做什么的情况下,很难知道。如果您使用x
的显式输入也会有所帮助。
我的猜测是,short
而不是ushort
的内容正在拆箱,但我们无法从这一段代码中得知。我假设这是一个例外而不是编译时错误?更多信息请!
答案 1 :(得分:0)
根据您提供的代码提供答案极其困难。您没有说明哪条线路出错或问题出在哪里。但是,检查C#中的Convert类,如果问题出在C#而不是你的DB或Subsonic上,那么我认为转换就可以了。
ushort num1 = some_number;
短号;
num2 = Convert.ToUInt16(num1);
然而,要理解这种转换的含义是非常困难的,你应该知道这可能会在以后破坏其他东西。
答案 2 :(得分:0)
我对SubSonic 3和MySQL有完全相同的问题 - 我能找到的唯一方法就是将MySQL表定义更改为使用有符号列而不是无符号列。
如果您需要额外的范围,您可以随时使用bigint(尽管我认为这会对32位处理器产生性能影响)。
答案 3 :(得分:0)
我从Subsonic3 Templates for MySQL做了一个分叉。在我的fork中,我进行了修改,因此它可以支持MySQL无符号数据类型,这解决了我自己的问题:D请检查出来,http://github/funky81
答案 4 :(得分:0)
将ActiveRecord.cs中unsigned列的属性从int或?int更改为uint和?uint将部分解决问题。