C# 无法隐式转换类型';System.Data.Entity.Core.Objects.ObjectResult<&燃气轮机';至';int';
我创建了一个存储过程,并在MVC应用程序中使用实体框架数据库优先方法。我正在尝试捕获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
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…”);
然而,考虑到这是一个脚手架,如果您在某个时候被迫重新生成它,那么这种更改可能不会持续,所以在这里要小心