這個主題的許多問題都不符合我的情況。我有一個大數據模型。在某些情況下,只需要在UI上顯示一些字段,因此對於那些我將LINQ to Entity查詢替換爲使用Entity SQL查詢抽取所有內容的查詢,僅使用Type構造函數檢索所需的列,以便獲得一個實體返回,而不是一個DbDataRecord,像這樣:實體框架5 SaveChanges不工作,沒有錯誤
SELECT VALUE MyModelNameSpace.INCIDENT(incident.FieldA, incident.FieldB, ...) FROM ... AS ...
這可以工作並顯示UI中的字段。如果我做了更改,當我從UI元素中取出標籤時,更改會將其返回到實體模型。但是當我執行SaveChanges時,更改不會持久保存到數據庫。 Log中沒有顯示錯誤。現在,如果我非常仔細地與實體SQL查詢檢索整個實體,像這樣替換上面的查詢:
SELECT VALUE incident FROM MyDB.INCIDENTs AS incident...
變化做在數據庫中得到堅持!因此,作爲測試,我創建了另一個查詢,如第一個爲實體中的每個列命名的查詢,這應該與第二個實體SQL查詢完全相同。但它並沒有對數據庫做出任何改變。
我試圖返回的結果設置MergeOption到PreserveChanges,開始跟蹤,像這樣:
incidents.MergeOption = MergeOption.PreserveChanges;
但是這並沒有影響。但是,實際上,如果使用Entity Sql檢索整個實體仍然存在更改,那麼在檢索字段的子集時,行爲會有什麼邏輯目的?我想知道這是否是一個錯誤?
我_think_這是相同的區別只是作爲一個newing'Incident'代碼或獲取它上下文中的集合。第一個實例沒有被跟蹤,因爲上下文不知道它。 –
不確定它是否相關,但我忘記顯示返回的值ObjectQuery傳入CollectionViewSource對象。這就是數據填充字段的原因,更改被推回到實體字段。 –
whandley
謝謝。但是,如果是這樣,我如何才能讓情境知道?我認爲MergeOption.PreserveChanges會確保這一點,但它不起作用。 – whandley