Nic*_*ahn 5 sql sql-server entity-framework
编辑:打电话
var _data = context.Database.SqlQuery<InfoViewModel>(sql).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果我在sql管理工作室中运行以下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'
Run Code Online (Sandbox Code Playgroud)
转换为值类型'System.Guid'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型
导致该错误的原因是,Guid从Sql查询返回的列之一为NULL,并且InfoViewModel由于匹配属性定义为Guid,not Nullable<Guid>或,因此无法绑定到您的实体Guid?。
这里可能的罪魁祸首是,如果a 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
...
Run Code Online (Sandbox Code Playgroud)
在这里,如果存在一个Row dbo.Clients,其值CollectionsAssignedTo没有对应的dbo.aspnet_Usersrow相同c.UserId,则将返回一行,但是该c.UserId列将为NULL,并且您将收到问题中提到的错误。(LOJ超过INNER JOIN的存在可能意味着预期失败的联接)。