簡體   English   中英

具有多個結果集和自定義實體的實體框架代碼優先存儲過程

[英]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查詢,並將返回的數據行轉換為實體對象。

(我的重點)

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

暫無
暫無

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

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