簡體   English   中英

實體框架:存儲過程的返回類型錯誤

[英]Entity Framework : wrong return type of stored procedure

我有一個存儲過程,可以在下面找到邏輯,現在當我將這個sp轉到EF {version 5.0}時,這個sp會將返回類型作為int。

Create Proc  SP_GetResultBasedOnFilterForCoverage
(
 @AgeID int,
 @IncomeID int,
 @GenderID int,
 @EducationID int,
 @ProductID int
)
as
set nocount on
Declare  @query varchar(max), @index  int, @totalrow int, @coverageTotal bigint
IF OBJECT_ID('tempdb..#SecondDataSet') IS NOT NULL
    DROP TABLE #SecondDataSet
Create table #SecondDataSet
(
CoverageID int,
  Coverage varchar(100),
  Percentage float
) 

Declare @CoverageTable Table
(
  id int identity(1,1),
  CoverageID  int,
  Coverage varchar(100),
  CoverageCount int   
)

insert into @CoverageTable
(CoverageID,Coverage,CoverageCount)
Select TCPC.CoverageID,Coverage.Coverage, COUNT(CustomerID) from TBL_Customer_Product_Choice as  TCPC
inner join 
Tbl_Coverage as coverage
on 
coverage.CoverageID = TCPC.CoverageID
group by 
TCPC.CoverageID,coverage.Coverage



set @index = 1;
Select @totalrow =  COUNT(ID) from @CoverageTable

While(@index <= @totalrow)
begin
Declare @CurrentCoverageID int
Select  @coverageTotal = CoverageCount, @CurrentCoverageID = CoverageID from @CoverageTable where id = @index
set @query  = '
 Insert into #SecondDataSet 
 (Percentage,CoverageID,Coverage)

Select Round((Cast(COUNT(TCPC.CustomerID) as float)/cast('+cast(@coverageTotal as varchar)+' as  bigint)) * 100,1)  as Percentage ,
TCPC.CoverageID ,TC.Coverage 
from  Tbl_customer_Product_Choice as TCPC
inner  join 
Tbl_Coverage as  TC
on 
TCPC.CoverageID = TC.CoverageID
Where productID = cast('+cast(@ProductID as varchar)+'as int)  and TCPC.CoverageID = cast('+ cast(@CurrentCoverageID as varchar)+' as  int)'

if(@AgeID <> 0)
begin

  set  @query += ' and  AgeID = ' + CAST(@AgeID as  varchar);
End

if( @IncomeID != 0)
begin
  set  @query += ' and  IncomeID = ' + CAST(@IncomeID as  varchar);
End

if(@EducationID != 0)
begin
  set  @query += ' and  EducationID = ' + CAST(@EducationID as  varchar);
End

if(@GenderID > -1)
begin
  set  @query += ' and  GenderID = ' + CAST(@GenderID as  varchar);
End

set @query += ' group  by  TCPC.CoverageID,TC.Coverage
order by  COUNT(TCPC.CustomerID) desc
'
Exec(@query)
set  @index = @index + 1;
end

Select * from #SecondDataSet

我最近遇到了這個問題。 EF無法自動生成SP。 我們應該手動添加它。 結果,我應用了以下方法。

這是我的示例SP:


CREATE TABLE #LocalTempTable
(
    c1 INT,
    c2 INT, 
    c3 NVARCHAR(50),
    c4 INT
)

SELECT * FROM #LocalTempTable

添加一個新的復雜類型(用於臨時表的返回列):

1-從解決方案資源管理器中打開.edmx文件

2-右鍵單擊以從打開的窗口中清空空間,然后單擊“添加新的->復雜類型”

3-重命名類型,然后在模型瀏覽器上右鍵單擊重命名的類型,然后單擊“添加->標量屬性-> COLUMN_TYPE”

我的SP返回4列。 int32int32stringint32 如果返回類型為nullablenullable ,則可以從屬性窗口更改

5-現在我們可以從數據庫導入SP。 右鍵單擊“模型瀏覽器”上的“功能導入”,然后單擊“添加功能導入”

6-寫一個自定義名稱(注意:在此代碼后面使用此名稱)選擇存儲過程。 勾選“復雜”,選擇創建的復雜類型,然后單擊“確定”。

現在測試SP

DBEntities db = new SIRAMATIKEntities();
List<complex_type> result= db.FunctionName(data).ToList();

如果返回的列名使用不同的復雜類型列,則可以從“映射詳細信息”中進行更改。 在模型瀏覽器中,右鍵單擊創建的函數,然后單擊“函數導入映射”。

希望對您有所幫助。 如果拼寫錯誤,我感到抱歉。 我用翻譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM