圖像,我有一個巨大的數據庫,存儲來自不同的數據源,如兩個不同的論壇的線程和帖子。對於每個數據源,實體的Id(例如ThreadId,PostId ...)都是唯一的,但它可能會與其他數據源獲得的實體的Id相沖突。例如,forum1和forum2都可以有Threadid = 1的線程:Linq2SQL數據庫設計:映射覆合/代理鍵
我正在使用Linq2Sql和存儲庫模式將我的應用程序連接到數據庫。我使用Linq2Sql時應該避免使用組合鍵(在ThreadId和DatasourceId之間)。所以我想,代理主鍵是我唯一的選擇(是嗎?):
表主題:
- 唯一ID - INT,PK
- 的DataSourceID - 詮釋
- 的ThreadId - INT
- ...
表帖子:
- 唯一ID - INT,PK
- 的DataSourceID - 詮釋
- 帖子ID - 詮釋
- 線程ID - INT,FK到Threads.ThreadId
現在,我的問題是:LINQ2SQL能夠映射生成的類中的帖子和線程之間的1:1關係? 如果一個帖子有一個外鍵給Thread.ThreadId,並且如果有兩個實體具有相同的ThreadId(但是不同的DatasourceIds,當然)會發生什麼?我想這將返回一個分配的線程集合 - 這是我不想要的!我可以以某種方式爲每個帖子返回一個單獨的線程,它是共享相同的DatasourceId的嗎?
做到這一點,我越去想它,我就越想使用組合鍵結合的ThreadId和DataSourceID的希望的解決方案。那(不)與Linq一起工作?我可以在代碼中設置這兩個字段並將它們保存到數據庫中,還是需要在線程和帖子之間共享DataContext? – Shackles 2011-04-08 13:29:59