我是一个 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 违规。知道为什么会发生这种情况,以及如何解决它吗?