我在使用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;