C# 无法隐式转换类型';System.Data.Entity.Core.Objects.ObjectResult<&燃气轮机';至';int';

C# 无法隐式转换类型';System.Data.Entity.Core.Objects.ObjectResult<&燃气轮机';至';int';,c#,asp.net-mvc-5,entity-framework-6,C#,Asp.net Mvc 5,Entity Framework 6,我创建了一个存储过程,并在MVC应用程序中使用实体框架数据库优先方法。我正在尝试捕获requestid,这是在我的数据库中使用repository方法生成的标识字段。我的存储库方法中出现编译时错误 错误CS0029无法隐式转换类型 “System.Data.Entity.Core.Objects.ObjectResult” 到 “int”CC.GRP.MCRequest E:\TFS2015\CC.GRP.MCRequest\CC.GRP.MCRequest\CC.GRP.MCRequest\R

我创建了一个存储过程,并在MVC应用程序中使用实体框架数据库优先方法。我正在尝试捕获
requestid
,这是在我的数据库中使用repository方法生成的标识字段。我的存储库方法中出现编译时错误

错误CS0029无法隐式转换类型 “
System.Data.Entity.Core.Objects.ObjectResult
” 到 “int”CC.GRP.MCRequest E:\TFS2015\CC.GRP.MCRequest\CC.GRP.MCRequest\CC.GRP.MCRequest\Repository\RequestRepository.cs 127处于活动状态

在实体框架模型浏览器的函数导入部分,我将函数指向我创建的复杂类型。此复杂类型包含int 32类型的
RequestId
。谁能告诉我问题出在哪里

存储过程

ALTER PROCEDURE [dbo].[spInsertRequest]
(

             @CountryCode char(2), @CompanyCode varchar(4), @SalesOfficeID int,@CustomerMasterDataID int,@GeneralAgreementName varchar(150)
           , @IsDayBusiness bit, @ProjectName varchar(160),@ProjectContent  varchar(160),@ContractStartDate datetimeoffset(7)
           , @ContractDurationInMonths int,@Priority datetimeoffset(7),@PersonResponsibleMasterDataId int, @ProjectApplicantMasterDataId int
           , @IsRequiredToSendToCostDesk bit,@CalculationSpecials varchar(2000), @RequestStatusCode varchar(4)
           , @CreatedBy varchar(20)

)

AS
BEGIN

    set nocount on

    ----------------------------------------
    -- variables
    ----------------------------------------

    -- error
    declare @ErrorMessage nvarchar(2048), @ErrorSeverity int, @ErrorState int, @RequestId int

    ----------------------------------------
    -- insert record
    ----------------------------------------

    begin try


        -- insert record
            INSERT INTO [dbo].[Requests]
           ([CountryCode]
           ,[CompanyCode]
           ,[SalesOfficeID]
           ,[CustomerMasterDataID]
           ,[GeneralAgreementName]
           ,[IsDayBusiness]
           ,[ProjectName]
           ,[ProjectContent]
           ,[ContractStartDate]
           ,[ContractDurationInMonths]
           ,[Priority]
           ,[PersonResponsibleMasterDataId]
           ,[ProjectApplicantMasterDataId]
           ,[IsRequiredToSendToCostDesk]
           ,[CalculationSpecials]
           ,[RequestStatusCode]
           ,[CreatedBy]
           )
     VALUES
           (@CountryCode, 
            @CompanyCode, 
            @SalesOfficeID,
            @CustomerMasterDataID,
            @GeneralAgreementName,
            @IsDayBusiness, 
            @ProjectName, 
            @ProjectContent,
            @ContractStartDate,
            @ContractDurationInMonths, 
            @Priority,
            @PersonResponsibleMasterDataId,
            @ProjectApplicantMasterDataId,
            @IsRequiredToSendToCostDesk,
            @CalculationSpecials,
            @RequestStatusCode,
            @CreatedBy 
           )




        -- get assigned id
        set @RequestId = scope_identity()



    end try
    begin catch
        select @ErrorMessage = dbo.fnGetErrorMessage('Insert Request Record', error_message(), object_schema_name(@@procid), object_name(@@procid), error_line()), @ErrorSeverity = error_severity(), @ErrorState = error_state();
        raiserror(@ErrorMessage, @ErrorSeverity, @ErrorState);
        return
    end catch

    -- return assigned id
    select @RequestId as RequestId

END
存储库方法

public int CreateRequest(Request request)
{
    int requestID = 0;

    if (HttpContext.Current.Session["MCRSession"] != null)
    {
        requestID = db.spInsertRequest(    request.CountryCode,
                                           request.CompanyCode,
                                           request.SalesOfficeID,
                                           request.CustomerMasterDataID,
                                           request.GeneralAgreementName,
                                           request.IsDayBusiness,
                                           request.ProjectName,
                                           request.ProjectContent,
                                           request.ContractStartDate,
                                           request.ContractDurationInMonths,
                                           request.Priority,
                                           request.PersonResponsibleMasterDataId,
                                           request.ProjectApplicantMasterDataId,
                                           request.IsRequiredToSendToCostDesk,
                                           request.CalculationSpecials,
                                           request.RequestStatusCode,
                                           MCRHelper.GetShortname());
    }

    return requestID;
}

您的
db.spInsertRequest
方法返回
spInsertRequest\u结果
,而不是
int
。很可能,这个类是为了自动处理SP的结果而构建的,它只是有一个
RequestId
属性,您可以访问:

 requestID = db.spInsertRequest(...).RequestId;
或者您可以简单地更改该方法,将查询结果提取到
int
,而不是
spInsertRequest\u结果
。该方法可能有如下内容:

Database.SqlQuery<spInsertRequest_Result>("EXEC spInsertRequest ...");
Database.SqlQuery(“EXEC spInsertRequest…”);
改为:

Database.SqlQuery<int>("EXEC spInsertRequest ...");
Database.SqlQuery(“EXEC spInsertRequest…”);
然而,考虑到这是一个脚手架,如果您在某个时候被迫重新生成它,那么这种更改可能不会持续,所以在这里要小心