实体框架存储过程抛出“无法找到源类型'int'的查询模式的实现。'选择'未找到'。错误

时间:2015-09-27 19:56:05

标签: c# entity-framework stored-procedures

我在使用Entity Framework调用存储过程的类中有一个方法,并且它不断抛出错误

  

无法找到源类型“int”的查询模式的实现。 “选择”未找到。

但是,我在另一个类中使用完全相同的方法,并且它根本不会抛出任何错误。

有问题的方法就是这个..

public List<ActiveAdministratorsForUpdate> GetActiveAdministratorByID(int id)
{
    List<ActiveAdministratorsForUpdate> lst = new List<ActiveAdministratorsForUpdate>();
    var query = from a in AAE.usp_GetActiveAdministratorsByID(id)
                select a;

    foreach (var b in query)
    {
        lst.Add(new ActiveAdministratorsForUpdate
                    {
                       administratorID = b.AdministratorID,
                       administratorName = b.AdministratorName,
                       administratorPassword = b.UserPassword,
                       administratorEmail = b.AdministratorEmail,
                       administratorRole = b.RoleName,
                       administratorRoleID = b.RoleID });
    }

    return lst;
}

我正在做的是移动一些代码来处理我添加到项目中的另一个数据库。

更多信息

public virtual int usp_GetActiveAdministratorsByID(Nullable<int> administratorID)
    {
        var administratorIDParameter = administratorID.HasValue ?
            new ObjectParameter("AdministratorID", administratorID) :
            new ObjectParameter("AdministratorID", typeof(int));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("usp_GetActiveAdministratorsByID", administratorIDParameter);
    }

这是存储过程

    ALTER PROCEDURE [dbo].[usp_GetActiveAdministratorsByID]
(
@AdministratorID int
)
AS
DECLARE @ERROR_SEVERITY int,
        @MESSAGE varchar(1000),
        @ERROR_NUMBER int,
        @ERROR_PROCEDURE nvarchar(200),
        @ERROR_LINE int,
        @ERROR_MESSAGE nvarchar(4000);

begin try
    select 
       administrator.AdministratorID,
       administrator.AdministratorName,
       administrator.AdministratorEmail,
       administrator.LoginID,
       lup.UserPassword,
       roles.RoleName,
       roles.RoleID
       from [Administrator] administrator
       inner join [Login] l on administrator.LoginID = l.LoginID
       inner join [LoginUserPassword] lup on lup.LoginUserPasswordID = l.LoginUserPasswordID 
       inner join [AdministrationHistory] administrationhistory on administrator.AdministratorID = administrationhistory.AdministratorID
       left join [Roles] roles on administrator.RoleID = roles.RoleID
       where administrationhistory.IsActive = 1 and administrator.AdministratorID = @AdministratorID
end try
BEGIN CATCH
    SET @ERROR_SEVERITY = ISNULL(ERROR_SEVERITY(),'');
    SET @ERROR_NUMBER = ISNULL(ERROR_NUMBER(),'');
    SET @ERROR_PROCEDURE = ISNULL(ERROR_PROCEDURE(),''); 
    SET @ERROR_LINE = ISNULL(ERROR_LINE(),'');
    SET @ERROR_MESSAGE = ISNULL(ERROR_MESSAGE(),'');

    -- Test if the transaction is uncommittable.
    IF (XACT_STATE()) = -1
        BEGIN
            --PRINT N'The transaction is in an uncommittable state. Rolling back transaction.'
            ROLLBACK TRANSACTION;
        END;

    -- Test if the transaction is active and valid.
    IF (XACT_STATE()) = 1
        BEGIN
            --PRINT N'The transaction is committable. Committing transaction.'
            COMMIT TRANSACTION;   
        END;

    SET @MESSAGE = 'Error Occured in Stored Procedure ' + cast(@ERROR_PROCEDURE as varchar(200)) + 
                    '; Line Number ' + cast(@ERROR_LINE as varchar) + 
                    '; Message: [' + cast(@ERROR_NUMBER as varchar) + '] - '
                    + cast(@ERROR_MESSAGE as varchar(255))

    RAISERROR(@MESSAGE, @ERROR_SEVERITY, 1);
END CATCH;

0 个答案:

没有答案