2009-06-13 14 views
4

データベースに、Linq2Sqlエンティティを作成しようとしているテーブルが2つあります。そここれよりも彼らに多くのですが、これは彼らが降りてくるものを、本質的である:Linq2Sql:両方のテーブルにプライマリキーを持たない外部キー関係のエンティティを作成できますか?

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

UserActivity表は、基本的に、ユーザは部屋のテーブルに対して実行するアクションのためだけのログです。

テーブルは、取られたアクションのロギングにのみ使用されているため、Linq2SqlマッパーがUserActivityを作成することを拒否するまで、元々テーブルのプライマリキーを作成することはあまり意味がありませんでした。 LinqエンティティのRoomエンティティの一部です。これらの警告は、私の中でActivityID列を作成するために私を導い

  • 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.

:私はVisual Studioのデザイナでエンティティを設定すると、私はこれらの2回の警告を得ました上記の表を参照してください。

Linq2Sqlが両方のテーブルにプライマリキーを持たずにエンティティ間の関係を作成できるようにする方法があるかどうかを知りたいと思います。 UserActivityテーブルに主キーがない場合でも、エンティティは作成できますが、関係は生成されません。

これは可能ですか、一般的な習慣として、自分のテーブルに常にプライマリキーがあることを確認する必要がありますか?

答えて

3

アプリに実際のデータを格納するテーブルは、常にプライマリキーを持つ必要があります。ほとんどの場合、SQL Server環境では、INT ID(1,1)は問題ありません。あなたはそれらを追跡する必要はなく、簿記などは必要ありません。それはあなたに多くの費用をかけることは全くありません。なぜなら、UserActivityテーブルでさえ、主キーを持たない理由は何もありません。

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

完了しました。

大量のデータを一括インポートする一時テーブルやその他の一時的なシナリオの場合は、プライマリキーが必要ないとしか言​​えません。

マーク

1

リレーションシップを作成するには、主キーが必要です。 サロゲート(自動インクリメントID)を追加した場合でも、主キーでテーブルを設計することをお勧めします。

関連する問題