2010-06-24 48 views
15

我在我的數據庫中創建了一個特定視圖(用左連接加入大約5-6個表)。此視圖添加到我的edmx(實體框架1.0)。最近我注意到,使用EDMX(LINQ到實體,然後ToList())得到重複多次,但在數據庫中的觀點,他們是不同的數據庫視圖的實體框架結果差異

Column-N (Expected result/ result from DB view) 
--------- 
data1 
data2 
data3 
data4 
data5 

Column-N(Actual result generated by entity framework) 
--------- 
data1 
data1 
data1 
data1 
data1 

我啓動了我的SQL事件探查器獲得的列記錄之一,得到了由我的應用程序發送到SQL Server的查詢,運行它,它返回了我預期的結果。

MSDN有一個類似的帖子herehere但主持人還沒有詳細說明如何解決這個問題。我的鑰匙恰好是一個GUID

你所指出的根本原因,我認爲 是正確的,問題是在 應用端EF映射,如EF與 數據庫 不同對象的映射規則。當查詢結果從數據庫返回 時,EF 將根據自己設計的 邏輯在應用程序 上執行映射。

當您在數據庫端設計您的 視圖查詢時,考慮這些邏輯 是很重要的。我想 認爲你應該做一些調整 你的查看查詢。

我不知道你是否已經整理 的問題,如果不是請提供與此相關的 問題 數據庫結構和視圖查詢你有 寫的。

感謝賓澤

有人曾經遇到過類似的問題?

回答

17

問題實際上是關鍵。你必須a)在視圖中爲每一行都有唯一的標識符。和b)在EDMX中相應地映射該密鑰。否則,如您的報價狀態,映射邏輯將看到每個後續行,並指出它可以使用它返回之前返回的相同對象實例。

+0

你說得對。我錯誤地認爲它是將我的GUID作爲主鍵,直到我去看了StorageModel和概念模型。它使用一些其他列作爲主鍵,因此也是一團糟。 通過手動更改密鑰(不使用VS2008 GUI) – ram 2010-06-24 15:48:35

0

對我來說同樣的問題。 的實體視圖(VReport)從VS2010嚮導自動生成是這樣的:當我取回的,正確形成SQL查詢數據庫中的記錄,返回預期(和不同的)結果

class VReport 
Line: int (key) 
Desc: string 
Date: DateTime 

,但實體框架返回了很多重複的記錄。

而是還日期列/字段將具有在形成參與*實體鍵

因此,要解決這個問題,我改變了該領域的財產實體鍵:假 - >true

class VReport 
Line: int (key) 
Desc: string 
Date: DateTime (key)