我有一个巨大的数据库,它存储来自不同数据源(如两个不同论坛)的线程和帖子。对于每个数据源,实体的 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 的帖子吗?