2

我有一个巨大的数据库,它存储来自不同数据源(如两个不同论坛)的线程和帖子。对于每个数据源,实体的 ID(例如 ThreadId、PostId...)是唯一的,但它可能与另一个数据源获得的实体的 Id 冲突。例如,forum1 和 forum2 都可以有一个 Threadid=1 的线程:

我正在使用 Linq2Sql 和存储库模式将我的应用程序连接到数据库。我读到使用 Linq2Sql 时应避免使用复合键(在 ThreadId 和 DatasourceId 之间)。因此,我想代理主键是我唯一的选择(是吗?):

表线程:

  • UniqueId - 整数,PK
  • DatasourceId - 整数
  • ThreadId - 整数
  • ...

表帖:

  • UniqueId - 整数,PK
  • DatasourceId - 整数
  • PostId - 整数
  • ThreadId - int,FK 到 Threads.ThreadId

现在,我的问题是:Linq2Sql 是否能够在其生成的类中映射帖子和线程之间的 1:1 关系?如果帖子具有 Thread.ThreadId 的外键并且有两个实体具有相同的 ThreadId(当然是不同的 DatasourceId),会发生什么?我想这将在帖子上返回一组分配的线程 - 我不想要!我还能以某种方式为每个帖子返回一个共享相同 DatasourceId 的帖子吗?

4

1 回答 1

0

没错,LinqToSql 不会知道某个 Threadid 是唯一的。您可以通过在每个查询的 where 子句中包含 Datasourceid 来做到这一点

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