'System.Guid' 失败,因为物化值为空。结果类型的泛型参数或查询必须使用可空类型
'System.Guid' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type
编辑:
打电话
var _data = context.Database.SqlQuery<InfoViewModel>(sql).FirstOrDefault();
如果我 运行 下面 sql 在 sql management studio 和它的工作没有抛出任何错误但是如果我使用 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
您的查询 returns Guid
列之一中的 null
值。 null
值不能放入 DTO class InfoViewModel
中的 Guid
属性。您如何将 null
转换为 Guid
?不可能。
使 属性 接受 null
值。
错误是因为从您的 Sql 查询返回的 Guid
列之一是 NULL,并且无法绑定到您的 InfoViewModel
实体,因为匹配的 属性定义为 Guid
,而不是 Nullable<Guid>
或 Guid?
.
这里可能的罪魁祸首是,如果 Left Outer Join
无法匹配,则右侧 table 中的所有列都将返回 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 可能意味着失败的连接是预期的)。
编辑: 打电话
var _data = context.Database.SqlQuery<InfoViewModel>(sql).FirstOrDefault();
如果我 运行 下面 sql 在 sql management studio 和它的工作没有抛出任何错误但是如果我使用 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
您的查询 returns Guid
列之一中的 null
值。 null
值不能放入 DTO class InfoViewModel
中的 Guid
属性。您如何将 null
转换为 Guid
?不可能。
使 属性 接受 null
值。
错误是因为从您的 Sql 查询返回的 Guid
列之一是 NULL,并且无法绑定到您的 InfoViewModel
实体,因为匹配的 属性定义为 Guid
,而不是 Nullable<Guid>
或 Guid?
.
这里可能的罪魁祸首是,如果 Left Outer Join
无法匹配,则右侧 table 中的所有列都将返回 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 可能意味着失败的连接是预期的)。