2012-11-20 68 views
1

我已經通過一個曲折而令人沮喪的路線來到了這個困境,但我會從現在開始。我正在使用VS2010,Silverlight 5和最新版本的Silverlight和RIA工具包,SDK等信息。Silverlight WCF RIA服務從SQL視圖中選擇vs SQL表

我在我的數據庫中有一個視圖(它實際上現在是一個索引視圖,但這並沒有區別行爲)。出於測試目的(並且包括測試我的理智),我已將表視圖重複爲表(即相同的列名和定義),並將所有視圖行插入到表中。所以,如果我從查看分析器的查看或表SELECT *,我得到相同的結果。到現在爲止還挺好。

我在我的Silverlight業務應用程序Web項目中創建了一個EDF模型,包括所有對象。

我創建了一個基於模型的域服務,它爲View和Table以及關聯的Query對象創建了ContextTypes和元數據。

如果我通過表查詢在我的Silverlight項目中填充Silverlight列表框,它將返回表中的所有數據。

如果我通過查看查詢填充相同的列表框,它將僅返回一行,始終是集合中的第一行,但它是有序的。實際上,如果我通過調試器深入研究內部工作,那麼當它在服務中執行ObjectContext查詢時,它會返回正確行數的結果集,但所有行都是相同的!如果我順序升序,我會得到第一行的n個副本,下行我得到最後一行的n個副本。

任何人都可以擺脫我的痛苦在這裏,並告訴我爲什麼視圖不起作用?

阿德

回答

2

OK,很好,是可以預見的 - 幾乎每一個我問一個問題,在論壇上,我通過這個答案絆倒,而我在等待迴應中充斥的時間!

儘管已經通過元數據和model.designer文件並確保所有「視圖」和「表」類/方法定義等都是相同的,但它仍然顯示視圖和表查詢之間的行爲存在惱人的差異。所以問題只是由數據庫造成的,對吧?

果然,當我創建視圖的「相同」表版本時,我沒有注意到自己創建了NOT NULL列!儘管我使用SELECT NEWID()在視圖上創建唯一的鍵列,但數據庫堅持認爲視圖中的ID列是NULLABLE,顯然這是導致問題的原因。

爲了節省一些存儲空間,我使用NEWID()切換到使用ROW_NUMBER()創建我的密鑰列,但仍然存在「NULLABLE」屬性問題。 SO然後我把它改爲

SELECT ISNULL(ROW_NUMBER()(OVER ...),-1)

ID列,最後在視圖中的列創建NOT NULL!即使NEWID()和ROW_NUMBER()都不能生成NULL輸出,但似乎必須先握住SQL Server的手並在它相信自己之前使用ISNULL運算符再次確認它。

完成此操作後,刪除/重新創建了我的模型和服務文件,無需任何手動添加[Key()]屬性或其他任何東西即可生成輝煌的彩色生活。問題一直伴隨着數據庫,而不是模型/服務/元數據定義。

希望這節省了一些人的時間。現在我所需要做的就是弄清爲什麼兩天前開始的原始存儲過程方法不起作用 - 但至少我現在有一個提示!

Ade