我有一个巨大的数据库,存储来自不同数据源的线程和帖子,如两个不同的论坛。对于每个数据源,实体的Id(例如,ThreadId,PostId ......)是唯一的,但是它可能与由另一个数据源获得的实体的Id冲突。例如,forum1和forum2都可以有一个Threadid = 1的线程:
我使用Linq2Sql和存储库模式将我的应用程序连接到数据库。我读到使用Linq2Sql时应该避免使用复合键(在ThreadId和DatasourceId之间)。因此我猜一个代理主键是我唯一的选择(是吗?):
表格主题:
表格帖子:
现在,我的问题是:Linq2Sql能否在其生成的类中映射帖子和线程之间的1:1关系? 如果帖子有Thread.ThreadId的外键并且有两个实体具有相同的ThreadId(当然是不同的DatasourceIds)会发生什么?我想这将返回帖子上分配的线程的集合 - 我不想要!我可以以某种方式为每个帖子返回一个单独的线程,这个帖子是共享相同DatasourceId的帖子吗?
答案 0 :(得分:0)
你是对的,Linq To Sql不会知道某个Thread Id是唯一的。您可以通过在每个查询的where子句中包含Datasourceid来实现此目的
var myThreads = DataContext.Threads.Where(t => t.Datasourceid == 1);