2017-04-10 140 views
0

我已經創建了一個存儲過程,並在MVC應用程序中使用實體框架數據庫第一種方法。我正在嘗試捕獲requestid,這是一個在存儲庫方法中的數據庫中生成的標識字段。我得到一個編譯時錯誤在我的倉庫方法說無法將類型'System.Data.Entity.Core.Objects.ObjectResult <>'隱式轉換爲'int'

錯誤CS0029不能 型「System.Data.Entity.Core.Objects.ObjectResult<CC.GRP.MCRequest.Models.spInsertRequestId_Result>」 隱式轉換爲 「詮釋」 CC.GRP.MCRequest E:\ TFS2015 \ CC.GRP.MCRequest \ CC.GRP.MCRequest \ CC.GRP.MCRequest \庫\ RequestRepository.cs 127主動

在實體框架模型瀏覽器的功能導入部分,我指着的功能,我已經創建了複雜類型。這種複雜類型包含int類型的RequestId 32.有人能告訴我是什麼問題

StoredProcedure的

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; 
} 

回答

1

db.spInsertRequest方法返回spInsertRequest_Result,不int。很可能,這個類是腳手架來自動處理SP的結果,而只是有一個RequestId屬性,你可以訪問:

requestID = db.spInsertRequest(...).RequestId; 

或者你可以簡單地改變該方法將查詢結果提取到一個int,而不是spInsertRequest_Result。該方法可能有類似:

Database.SqlQuery<spInsertRequest_Result>("EXEC spInsertRequest ..."); 

修改成:

Database.SqlQuery<int>("EXEC spInsertRequest ..."); 

不過,考慮到這是一個支架,如果你不得不在某個時候重新生成這一點,變化可能不會持續,所以要小心。

相關問題