2016-10-14 79 views
2

我的存儲過程返回兩組結果。 ProductSearchResult和ProductSizeResult在我的情況下不是實體,因此我得到一個異常無法找到EntitySet名稱'Database.ProductSearchResult'。實體框架代碼具有多個結果集和自定義實體的第一個存儲過程

我不想在每個過程結果的dbcontext中創建實體,有沒有任何解決方案將存儲過程映射到自定義對象。

 try 
     { 
      DbContext.Database.Connection.Open(); 
      DbDataReader reader = cmd.ExecuteReader(); 
      result = ((IObjectContextAdapter)DbContext).ObjectContext.Translate<ProductSearchResult>(reader, "ProductSearchResult", MergeOption.AppendOnly).ToList(); 
      reader.NextResult(); 
      productSizeResults = ((IObjectContextAdapter)DbContext).ObjectContext.Translate<ProductSizeResult>(reader, "ProductSizeResult", MergeOption.AppendOnly).ToList(); 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex); 
     } 
     finally 
     { 
      DbContext.Database.Connection.Close(); 
     } 

我的自定義實體,

public class ProductSearchResult 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public int AvailableQuantity { get; set; } 

    public int Price{ get; set; } 
} 

public class ProductSizeResult 
{ 
    public int Id { get; set; } 

    public string Size { get; set; } 

    public int Count { get; set; } 
} 

我的存儲過程,

ALTER PROC GetProductResult @PrimaryCategory nvarchar(100) 
AS 

select P.Id 
,P.Name 
,PI.AvailableQuantity 
,PI.Price 
from Products P 
inner join ProductInventories PI on P.Id = PI.ProductId 
--where clause 

select CA.Name Size,count(1) Count 
from Products P 
inner join ProductInventories PI on P.Id = PI.ProductId 
inner join CustomAttributes CA on PI.CustomAttributeID = CA.Id 
--where clause 
group by CA.Name 

回答

0

MSDN

的翻譯<TElement>方法使您可以針對數據源執行標準的ADO.NET查詢並將返回的數據行轉換爲實體對象。

(我的重點)

這意味着類型ProductSearchResultProductSizeResult必須映射類型(實體類型)。這個事實已經被MergeOption參數揭示了 - 或多或少。這是關於如何將對象添加到變更跟蹤器,這對於非實體類型沒有意義。

相關問題