2

2つの異なるフォーラムのような異なるデータソースからのスレッドと投稿を保存する巨大なデータベースを持っているというイメージ。データソースごとに、エンティティのID(ThreadId、PostId ...など)は一意ですが、別のデータソースによって取得されたエンティティのIDと衝突する可能性があります。たとえば、forum1とforum2の両方にThreadid=1のスレッドを含めることができます。

Linq2Sqlとリポジトリパターンを使用して、アプリケーションをデータベースに接続しています。Linq2Sqlを使用するときは、複合キー(ThreadIdとDatasourceIdの間)を避ける必要があることを読みました。したがって、代理主キーが私の唯一の選択肢だと思います(そうですか?):

テーブルスレッド:

  • UniqueId-int、PK
  • DatasourceId-int
  • ThreadId-int
  • ..。

テーブル投稿:

  • UniqueId-int、PK
  • DatasourceId-int
  • PostId-int
  • ThreadId-int、FKからThreads.ThreadId

さて、私の質問は次のとおりです。Linq2Sqlは、生成されたクラスの投稿とスレッドの間の1:1の関係をマッピングできますか?投稿にThread.ThreadIdへの外部キーがあり、同じThreadIdを持つ2つのエンティティがある場合(もちろん、異なるDatasourceIdがある場合)はどうなりますか?これにより、投稿に割り当てられたスレッドのコレクションが返されると思いますが、これは望ましくありません。どういうわけか、同じDatasourceIdを共有する投稿ごとに1つのスレッドを返すことはできますか?

4

1 に答える 1

0

LinqToSqlは、特定のThreadidが一意であることを認識しません。これを行うには、各クエリのwhere句にDatasourceidを含めます。

var myThreads = DataContext.Threads.Where(t => t.Datasourceid == 1);
于 2011-04-08T12:27:23.710 に答える