![](/img/trans.png)
[英]The specified cast from a materialized 'System.Int32' type to the 'System.Double' type is not valid
[英]The specified cast from a materialized 'System.Double' type to the 'System.Int32' type is not valid But no Double defined
问候,我正在开发一个我认为非常简单的程序,我创建了一个视图,其中包含定义为字符串、整数和日期时间的三列。 (见下图)
Create View [dbo].[vw_findFaulty]
AS
WITH CTE_getMAXDate AS
(
Select DeviceId,MAX(Createtime) as maxLastDate
from locationhistory
group by DeviceId
)
SELECT B.DeviceName,DeviceId,maxLastDate FROM CTE_getMAXDate A
INNER JOIN dbo.devices B
ON A.DeviceId=B.id
where maxLastDate < dateadd(week,-3,getdate())
当我检查数据类型的属性时,我将视图导入我的模型,字符串,int32 和日期时间。
但是,当我调用我的方法来尝试加载我的简单视图时。
public ActionResult fault()
{
var findFaulty = db.vw_findFaulty;
return View(findFaulty.ToList());
}
我收到错误The specified cast from a materialized 'System.Double' type to the 'System.Int32' type is not valid.
除了我找不到任何对“双重”的引用这一事实之外,我 110% 确定这在以前有效。 如果有人可以将我引导到可以查找此错误的位置,我将不胜感激。
谢谢
假设数据库模型属性如下所示:
public int DeviceId { get; set; }
public string DeviceName { get; set; }
public DateTime maxLastDate { get; set; }
作为快速修复,有必要使用CAST
子句确保视图返回完全相同的数据类型:
CREATE VIEW [dbo].[vw_findFaulty]
AS
WITH CTE_getMAXDate AS
(
SELECT DeviceId, MAX(Createtime) AS maxLastDate
FROM locationhistory
GROUP BY DeviceId
)
-- explicit cast for DeviceId
-- if DATETIME column also returning similar error, use CAST(maxLastDate AS DATETIME)
SELECT B.DeviceName, CAST(DeviceId AS INT), maxLastDate FROM CTE_getMAXDate AS A
INNER JOIN dbo.devices AS B
ON A.DeviceId = B.id
WHERE maxLastDate < DATEADD(week, -3, GETDATE())
问题似乎源于从视图传递到指定模型类的数据类型,因为从 SQL 数据库绑定结果集需要在 SQL 数据类型到 CLR 类型之间进行转换和匹配(请注意,不能保证查询结果将返回预期的数据类型),即查询返回的DeviceId
数据类型可能与分配的模型类型不匹配。
类似问题:
我在 EntityFramework 上遇到了类似的问题。 只需从表中选择两列,并创建一个匿名类型,例如
ctx.mytable.Select(f=>new{f.column1, f.column2});
在测试中工作,而不是在生产中。
问题是 column2 的生产数据库中的数据类型与我的实体模型 (edmx) 不同。
在测试 column2 上是一个 tinyint,在生产中它是一个 int。 该模型是一个tinyint。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.