2012-12-14 24 views
1

我已經嘗試了幾種方式LINQ查詢來檢索插入到SQL服務器表中的最後一行。獲取最後一個插入的行在ID爲主鍵,是一個身份的sql服務器

我需要somenthing這樣

var lastId = from u in context.sistema_Documentos where u.id == max select u; 

有人說,這是不可能的,也有人說,它是不是安全或影響性能大大..我怎麼能執行這個查詢?

Ps ..會是一個很好的方法嗎?

var lastId = from u in context.sistema_Documentos orderby u.id descending select u.id; 
+0

這個問題是否有幫助? http://stackoverflow.com/questions/1220992/how-to-get-the-last-inserted-id-in-a-linq-to-sql-custom-sql-expression –

+5

這種方法是絕對不安全的高使用系統。你如何試圖去做,你需要做什麼?您是否正在執行插入操作並只需要插入的ID? –

+1

插入實體後立即還是不相關? – vtortola

回答

8

在您執行SubmitChanges()方法後,您正在查找的身份值可用。你可以這樣讀:

context.InsertOnSubmit(entityToInsert); 
context.SubmitChanges(); 
Var lastinsertedId = entityToInsert.Id; 
+2

我在做上述評論之後準備了這個答案,但工作被侵入,我錯過了我的窗口:) –

+0

@JoelEtherton - 是的,我知道。我一直在工作中遇到這個問題。 –

2

沒有性能問題,簡單明瞭的查詢:

var lastId = (from u context.sistema_Documentos 
      Select u.id).Max(); 

然而,這可能不是正確的方法,如果你的情況是,你要設置某種主從關係的一個uppdate。在這種情況下,你應該使用這個實體。正如喬爾所說,它並不總是回到最後......

例如。

context.InsertOnSumbit(masterEntity) 
detail.masterEntity = masterEntity 
context.InsertOnSubmit(detail) 
SubmitChanges()... 

這將在一次交易中正確處理PK/FK分配。

+3

在高使用率系統中,此方法不安全。如果你有很多插入,可能會得到一個不正確的ID。 –

+0

沒錯,我沒有閱讀「最後插入」,這種方法確實顯示了最大的ID。 – Pleun

+0

不好主意,如果有人插在你後面怎麼辦? – Jodrell

相關問題