2013-05-20 70 views
0

使用ADO.NET和存儲過程,可以簡單地將Scope_Identity()作爲SQL Server的輸出參數返回,以便您可以立即執行get並獲取剛插入的相同行/對象。我有點困惑於如何正確實現這與EF?我使用MVC4,EF5(代碼優先/ Fluent API)和一個CRUD和業務邏輯的服務層中的存儲庫模式,以便控制器不必處理EF任何數據訪問。我的控制器中的Action將ViewModel傳遞給服務層以進行插入,但自然沒有ID。服務層將視圖模型轉換爲域實體模型並插入它。現在我想將相同的視圖模型返回到我的視圖,但是如何確定它是沒有ID的同一個對象?似乎應該有一個明顯的解決方案,而不必訴諸timedatestamps或guids。實體框架 - 插入後返回相同的對象?

對不起,如果這是基本的,但我一直沒能找到答案。

+1

http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity-framework – AaronLS

+0

http://stackoverflow.com/questions/6466224/entity -framework-4-getting-primary-key-id-for-inserted-record – AaronLS

+0

http://stackoverflow.com/questions/8435462/get-auto-identity-key-after-insert-via-ef – AaronLS

回答

1

當實體框架插入對象時,INSERT查詢後立即跟着SELECT將任何數據庫生成的值讀回到對象中。這包括Id值(如果它是標識列)和任何計算列。

因此,在插入之後,您可以100%確定該對象處於插入狀態,並且還包含任何數據庫生成的值。

如果你想成爲200%的把握,你可以做

context.Entry(myNewObject).Reload(); 

也許在高併發的情況,當你知道,有插入和實際崗位之間的一些時間回到這可能是有用的用戶界面,但其他方面真的沒有必要。