2009-06-13 83 views
4

我在我的數據庫中有2個表,我試圖創建Linq2Sql實體。還有更多的他們比這一點,但是這基本上是他們來什麼到:Linq2Sql:我可以使用外鍵關係在兩個表中沒有主鍵的情況下創建實體嗎?

 
Rooms   UserActivity 
--------  -------- 
RoomID   ActivityID 
       RoomID (foreign key on Rooms.RoomID) 

UserActivity表本質上只是一個日誌操作的用戶執行對室表。

由於UserActivity表只用於拍攝,它並沒有很大的意義日誌操作(至少對我來說)創建的原始表的主鍵,直到LINQ2SQL映射器拒絕作出UserActivity一個我的Linq實體中的Room實體的一部分。當我在Visual Studio設計成立的實體,我得到了這2個警告:

  • Warning 1 DBML1062: The Type attribute 'UserActivity' of the Association element 'Room_UserActivity' of the Type element 'Room' does not have a primary key. No code will be generated for the association.
  • Warning 2 DBML1011: The Type element 'UserActivity' contains the Association element 'Room_UserActivity' but does not have a primary key. No code will be generated for the association.

這些警告促使我創建的ActivityID列我如上所示。

我想知道的是,如果有任何方法允許Linq2Sql在兩個表中沒有主鍵的情況下在我的實體之間創建關係。如果UserActivity表中沒有主鍵,則仍然可以創建實體,但不會生成關係。

是否可以做到這一點,或者我應該試圖確保我的表總是有一個主鍵在他們作爲一個普遍的良好做法?

回答

3

任何在應用程序中存儲實際數據的表都應該總是有一個主鍵 - 大多數情況下,在SQL Server環境中,INT IDENTITY(1,1)將會很好。你不必跟蹤這些信息,不需要記賬。等你花費不多,完全容易做 - 我沒有看到任何理由爲什麼沒有主鍵,即使在你的桌子上也是如此。

ALTER TABLE UserActivity 
    ADD UserActivityID INT IDENTITY(1,1) 
    CONSTRAINT PK_UserActivity PRIMARY KEY 

你就完成了!

我唯一需要說的是不需要主鍵的時候,就像臨時表在批量導入大量數據或其他臨時場景時的情況。

Marc

1

您需要一個主鍵來創建關係。 即使添加了代理(自動增量標識),也總是使用主鍵設計表,這是一種很好的做法。

相關問題