ASP.NET从oData Controller返回不正确的数据

时间:2016-10-03 17:14:57

标签: asp.net oracle entity-framework-6

我有一个使用Oracle的Entity Framework驱动程序的ASP.NET Web API应用程序。我有一个为视图定义的实体,如下所示:

  CREATE OR REPLACE FORCE VIEW "PHASE_TWO"."EDIPRODUCT" ("ID", "STK_NUM", "TITLE", "ISBN", "UPC", "ITEMNO", "LONGFORMAT", "ABRIDGED", "WEB_TITLES_ID", "OCLC", "GENRE", "RELYEAR", "ORIG_REL", "LANG", "ORIG_STKNUM", "PUBLISHER", "PEOPLELIST", "SALES_ORG", "NOT_AVAIL") AS 
  SELECT sap_product.id,
    sap_product.stk_num,
    sap_product.longdesc AS title,
    sap_product.isbn,
    sap_product.upc,
    sap_product.itemno,
    sap_product.longformat,
    sap_product.abridged,
    mwt_product.web_titles_id,
    mwt_product.oclc,
    mwt_product.genre,
    mwt_product.RELYEAR,
    sap_product.orig_rel,
    sap_product.lang,
    sap_product.orig_stknum,
    UPPER (publisher.name) publisher,
    (SELECT LISTAGG (p.FULLNAME, ', ') WITHIN GROUP (
    ORDER BY pp.rank) AS People
    FROM people p
    JOIN product_people pp
    ON p.id          = pp.peopleid
    WHERE pp.stk_num = sap_product.stk_num
    GROUP BY pp.STK_NUM
    ) PeopleList, 
    sppg.PRICING_TYPE as sales_org, 
    sap_product.not_avail
FROM sap_product
JOIN mwt_product ON sap_product.stk_num = mwt_product.stk_num
JOIN publisher ON mwt_product.publisherid        = publisher.id
JOIN SAP_PRODUCT_PRICING_GROUP sppg on sppg.STK_NUM = mwt_product.stk_num and sppg.MARKED_FOR_DELETION = 0
WHERE mwt_product.WEB_PRODUCTS_ID > 0;

此视图在SQL Developer中按预期工作。我的控制器中的getEDIPRODUCT函数(是的,它是VB.NET)如下:

' GET: odata/EDIPRODUCTs
        <EnableQuery>
        Function GetEDIPRODUCT() As IQueryable(Of EDIPRODUCT)
            Dim results As IQueryable
            results = db.EDIPRODUCT
            For Each _product In results
                Console.Write(_product)

            Next
            Return results
        End Function

我刚刚添加了for循环以检查结果。我在检查结果时看到的是每行返回相同的产品记录。 ID的值是重复的,唯一应该具有变量值的字段(sppg.PRICING_TYPE作为sales_org)也只是重复。

我还有其他观点,不会发生这种情况。始终返回正确的记录数,但检索到的第一个记录始终只在结果集的每一行中重复。知道这可能会发生什么吗?

1 个答案:

答案 0 :(得分:0)

我从未真正解决过这个问题,但仍然对此失败感兴趣,但我重写了使用此视图的应用程序部分,以使用OData的$ expand来检索相关数据。