我有一个使用ASP.NET实体框架驱动程序的Oracle应用程序。我有一个为视图定义的实体如下:
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;此视图在中按预期工作。我的控制器中的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)也只是重复。
我还有其他的看法,认为这是不可能的。总是返回正确的记录数,但是检索到的第一条记录总是在结果集中的每一行中重复。知道这里会发生什么事吗?
发布于 2016-10-04 13:38:37
我从来没有真正解决过这个问题,我仍然对为什么失败感兴趣,但是我重写了应用程序中使用这个视图来使用OData的$expand检索相关数据的部分。
https://stackoverflow.com/questions/39836937
复制相似问题