找不到列“dbo”或用户定义的函数无法找到列

时间:2018-01-25 05:13:00

标签: sql-server entity-framework tsql

我能够在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”,或名称含糊不清

非常感谢任何帮助。

2 个答案:

答案 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