图像,我有一个巨大的数据库,存储来自不同的数据源,如两个不同的论坛的线程和帖子。对于每个数据源,实体的Id(例如ThreadId,PostId ...)都是唯一的,但它可能会与其他数据源获得的实体的Id相冲突。例如,forum1和forum2都可以有Threadid = 1的线程:Linq2SQL数据库设计:映射复合/代理键
我正在使用Linq2Sql和存储库模式将我的应用程序连接到数据库。我使用Linq2Sql时应该避免使用组合键(在ThreadId和DatasourceId之间)。所以我想,代理主键是我唯一的选择(是吗?):
表主题:
- 唯一ID - INT,PK
- 的DataSourceID - 诠释
- 的ThreadId - INT
- ...
表帖子:
- 唯一ID - INT,PK
- 的DataSourceID - 诠释
- 帖子ID - 诠释
- 线程ID - INT,FK到Threads.ThreadId
现在,我的问题是:LINQ2SQL能够映射生成的类中的帖子和线程之间的1:1关系? 如果一个帖子有一个外键给Thread.ThreadId,并且如果有两个实体具有相同的ThreadId(但是不同的DatasourceIds,当然)会发生什么?我想这将返回一个分配的线程集合 - 这是我不想要的!我可以以某种方式为每个帖子返回一个单独的线程,它是共享相同的DatasourceId的吗?
做到这一点,我越去想它,我就越想使用组合键结合的ThreadId和DataSourceID的希望的解决方案。那(不)与Linq一起工作?我可以在代码中设置这两个字段并将它们保存到数据库中,还是需要在线程和帖子之间共享DataContext? – Shackles 2011-04-08 13:29:59