[英]Entity Framework Stored Procedures - Multiple Result sets with CodeFirst
[英]Entity Framework Code First Stored Procedures with Multiple Result Sets and custom entity
我的存儲過程返回了兩組結果。 在我的情況下,ProductSearchResult和ProductSizeResult不是實體,因此出現異常。找不到EntitySet名稱“ Database.ProductSearchResult”。
我不想為每個過程結果在dbcontext中創建Entity,是否有任何解決方案可將存儲過程映射到自定義對象。
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
根據MSDN :
Translate <TElement>方法使您可以對數據源執行標准的ADO.NET查詢,並將返回的數據行轉換為實體對象。
(我的重點)
這意味着類型ProductSearchResult
和ProductSizeResult
必須是映射類型(實體類型)。 MergeOption
參數已經或多或少地揭示了這一事實。 那是關於如何將對象添加到變更跟蹤器,這對於非實體類型沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.