我是一个 Linq 新手,我找不到任何文档来帮助我解决似乎是一个非常微不足道的问题 - 所以你的帮助将不胜感激!
我Table1
在数据库中有一个表,它在同一台服务器上DB1
有一个“伪”外键Table2ID
到Table2
数据库中的表。DB2
“伪”,因为显然我不能有一个跨越两个数据库的实际FK。
现在我在玩 O/R 设计器,我喜欢将数据库对象带入设计器时生成所有关系的方式……非常酷!我希望我的Table1
对象与 有关系Table2
,就像它与 中的所有“真实”外键相关对象有关系一样DB1
。但我不能带入Table2
我的数据库图,因为它在错误的数据库中。
为了综合这一点,我尝试在 中创建一个视图Table2
,DB1
这很简单select * from DB2..Table2
。啊哈,现在我可以将一个Table2
对象放入我的图表中。Table1
我什至可以在和之间建立父/子关系Table2
。但是当我查看生成的代码时,Table1
仍然与 没有任何关系Table2
,这让我感到最困惑。
我在某处错过了一步吗?有没有更好/推荐的方法来做到这一点?
谢谢!
之后...
按照一个人的建议,我尝试通过复制同一数据库中相关对象的所有结构来填充部分类,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 违规。知道为什么会发生这种情况,以及如何解决它吗?