我能够在SSMS内执行它返回预期值
的功能SELECT *
FROM dbo.AccDocumentHeaders
WHERE TypeDocumentId = 1
AND dbo.MiladiToShamsi(DocumentDate, 'Saal') = 1395
但是在实体框架上,我在尝试执行:
时遇到此错误var q= "SELECT *
FROM dbo.AccDocumentHeaders
WHERE TypeDocumentId=1
AND [dbo].MiladiToShamsi(DocumentDate,'Saal')=1395 ";
var result = _uow.AccDocumentHeaders.SqlQuery(q).ToList();
找不到列“dbo”或用户定义的函数不能 找到列“dbo”或用户定义的函数或聚合 “dbo.MiladiToShamsi”,或名称含糊不清
非常感谢任何帮助。
答案 0 :(得分:2)
使用SSMS时,您使用的是默认架构设置为dbo
的本地管理员帐户。但是,如果您的EF connection string
使用其他用户,则此用户的默认架构与dbo不同,因此,您将收到Cannot find column "dbo" ...
错误。
因此,请确保您将函数的执行权限授予您当前尝试执行的用户或使用正确的架构MyUserXYZ.MiladiToShamsi()
,并且您也应该使用此MyUserXYZ
架构创建此函数。
答案 1 :(得分:0)
请尝试下面提到的查询。
SELECT ADH.* FROM [dbo].[AccDocumentHeaders] as ADH,[dbo].[MiladiToShamsi] as MTS WHERE ADH.TypeDocumentId=1 AND (MTS.DocumentDate,'Saal')=1395