gpt4 book ai didi

sql - “System.Guid”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可以为 null 的类型

转载 作者:行者123 更新时间:2023-12-02 23:36:07 24 4
gpt4 key购买 nike

编辑:调用

  var _data = context.Database.SqlQuery<InfoViewModel>(sql).FirstOrDefault();

如果我在 sql Management Studio 中运行以下 sql,它的工作不会引发任何错误,但如果我有使用 EF 调用的相同查询,则会引发以下错误消息:

这是我的 SQL:

SELECT 
FROM dbo.Clients LEFT OUTER JOIN
dbo.aspnet_Users AS c ON dbo.Clients.CollectionsAssignedTo = c.UserId
LEFT OUTER JOIN dbo.aspnet_Users AS b ON dbo.Clients.Auditors_Key = b.UserId
LEFT OUTER JOIN dbo.aspnet_Users AS a ON dbo.Clients.AcctRep = a.UserId
WHERE dbo.Clients.ClientPKID = 'ce723426-dert-4c36-980a-f5181870d0d4'

The cast to value type 'System.Guid' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type

最佳答案

该错误是由于 Guid 之一引起的从您的 Sql 查询返回的列为 NULL,并且无法绑定(bind)到您的 InfoViewModel实体,因为匹配属性定义为 Guid ,不是Nullable<Guid>Guid? .

这里可能的罪魁祸首是如果 Left Outer Join如果匹配失败,则右侧表中的所有列都将返回 NULL。您尚未提供 SELECT 列,因此我们只能推测,但例如:

SELECT c.UserId, ... SomeOther columns
FROM dbo.Clients
LEFT OUTER JOIN dbo.aspnet_Users AS c ON dbo.Clients.CollectionsAssignedTo = c.UserId
...

这里,如果dbo.Clients中有一行值为 CollectionsAssignedTo没有对应的dbo.aspnet_Users具有相同的行 c.UserId ,将返回一行,但是 c.UserId列将为 NULL,您将收到问题中提到的错误。 (仅 LOJ 超过 INNER JOIN 的存在就可能意味着连接失败是预料之中的)。

关于sql - “System.Guid”失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可以为 null 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com