我有一個SQL Server 2008數據庫與一個組合鍵:ProjectID(GUID)和TaskID(int)。 ProjectID是項目表的外鍵。我想要TaskID自動遞增,但重新啓動每個ProjectID(即:每個項目ID應該有1,2,3,...作爲TaskID)。NHibernate,亞音速或L2S可以做實體自動增量嗎?
據我所知,這在SQL Server開箱即可使用,而且我需要一個存儲過程。在我深入研究之前,我想知道是否可以在我的ORM方面做到這一點?我在NHibernate 2.1.2和Subsonic 3.0之間未定,但即使Linq-To-SQL是可能的,也是一個選項(實體框架不是)。
我知道我可以手動編寫代碼,並且我知道在任何情況下都需要「SELECT max(TaskID)FROM任務WHERE ProjectID = @projectID」,但是如果我可以避免這樣做,我的ORM這樣做,那很好。
我沒有在他們各自的文檔中找到任何東西,但我不知道這個場景是否有適當的術語?
我不知道,但我的直覺說不。這將要在對象或業務邏輯中實現,ORM只是在那裏實現對象的持久性。我很好奇你爲什麼要爲每個項目重新啓動TaskID,如果它是爲了美觀,那麼我建議使用另一個字段來表示「TaskNumber」,並根據業務邏輯增加它,並將TaskID保留爲純自動遞增鍵。只是我的2p值。道歉沒有任何直接使用:) – Lazarus 2009-12-17 06:44:28
對不起,TaskID是真正的TaskNumber :)這是顯示給用戶的ID,因此它應該從1開始爲每個項目。 – 2009-12-17 06:48:52
儘管我並不完全同意Rob的回答,但我同意他的一般觀點:除非你絕對沒有選擇,否則不要選擇這種設計,在這種情況下,祝你好運。我不想觸摸這個設計的原因有很多,但這不是你問到的。 – 2009-12-17 12:47:18