如何使用Linq连接不同数据库中的表?

Sha*_*ica 5 c# linq views or-designer linq-to-sql

我有点像Linq新手,而且我找不到任何文档可以帮助我解决看似非常微不足道的问题 - 所以我们非常感谢您的帮助!

Table1在数据库中有一个表DB1,它在同一服务器上具有数据库Table2ID中表的"伪"外键."Pseudo",因为很明显我不能拥有跨越两个数据库的实际 FK.Table2DB2

现在我正在和O/R设计师一起玩,我喜欢将数据库对象带入设计师时生成所有关系的方式......非常酷!而且我希望我的Table1对象Table2与它有关系,就像它与所有"真正的"外键相关对象有关系一样DB1.但我无法Table2进入我的数据库图表,因为它在错误的数据库中.

合成本,我试图创建一个视图Table2DB1,这是根本select * from DB2..Table2.啊哈,现在我可以将一个Table2对象放入我的图表中.我甚至可以Table1和之间建立父/子关系Table2.但是当我查看生成的代码时,Table1仍然没有任何关系Table2,我觉得最令人困惑.

我在某处错过了一步吗?有没有更好的/推荐的方式这样做?

谢谢!


后来...

根据一个人的建议,我尝试通过复制同一个DB中相关对象的所有结构来填充Table1访问所需的所有方法的部分类Table2.

这实际上适用于读取,但是当我尝试更新或插入记录时,我得到了一个例外:

An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.

所以看起来Linq的设计师实际上已经考虑过这种情况,并决定不允许连接不同数据库中的对象.真是个耻辱...... :(


......甚至以后......

感谢@ williammandra.com,我发现您需要手动在视图上创建主键.但还有另一个问题:出于某种原因,当您从视图中加载一个值Table2并将其设置在新记录上Table1,然后提交更改时,它会尝试插入记录Table2,这显然会导致PK违规.知道为什么会这样,以及如何绕过它?

use*_*144 4

视图没有主键(没有主键,O/R 设计者就无法创建关系)。使用视图的解决方案已经成功了一半......您缺少的步骤是在 O/R 设计器中将 Table2 视图中关键字段的“主键”属性设置为 true。您仍然需要手动创建关联,但是保存 dbml 后,该关系将显示在生成的代码中。