首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq2SQL数据库设计:映射复合/代理密钥

Linq2SQL数据库设计:映射复合/代理密钥
EN

Stack Overflow用户
提问于 2011-04-08 12:08:14
回答 1查看 433关注 0票数 2

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

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

表线:

int

  • ...

  • UniqueId - int,PK
  • DatasourceId - int
  • ThreadId -

表员额:

  • DatasourceId
  • UniqueId - int,PK
  • PostId- int
  • ThreadId - int,FK to Threads.ThreadId

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-08 12:27:23

你说得对,LinqToSql不会知道某个Threadid是独一无二的。可以通过在每个查询中的where子句中包含Datasourceid来实现这一点。

代码语言:javascript
复制
var myThreads = DataContext.Threads.Where(t => t.Datasourceid == 1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5594822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档