繁体   English   中英

从具体化的“System.Double”类型到“System.Int32”类型的指定转换无效但没有定义 Double

[英]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数据类型可能与分配的模型类型不匹配。

类似问题:

Linq - 从具体化的“System.Int32”类型到“System.Double”类型的指定转换无效

我在 EntityFramework 上遇到了类似的问题。 只需从表中选择两列,并创建一个匿名类型,例如

ctx.mytable.Select(f=>new{f.column1, f.column2});

在测试中工作,而不是在生产中。

问题是 column2 的生产数据库中的数据类型与我的实体模型 (edmx) 不同。

在测试 column2 上是一个 tinyint,在生产中它是一个 int。 该模型是一个tinyint。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM