【发布时间】:2010-10-21 10:11:27
【问题描述】:
我是一个 Linq 新手,我找不到任何文档来帮助我解决这个看似非常微不足道的问题 - 所以我们将不胜感激您的帮助!
我在数据库DB1 中有一个表Table1,它在同一台服务器上的数据库DB2 中有一个“伪”外键Table2ID 到表Table2。 “伪”,因为显然我不能有一个跨越两个数据库的实际 FK。
现在我在玩 O/R 设计器,我喜欢将数据库对象带入设计器时生成所有关系的方式……非常酷!我希望我的Table1 对象与Table2 有关系,就像它与DB1 中的所有“真实”外键相关对象有关系一样。但我无法将Table2 带入我的数据库图中,因为它位于错误的数据库中。
为了综合这一点,我尝试在DB1 中创建一个视图Table2,它就是select * from DB2..Table2。啊哈,现在我可以将Table2 对象放入我的图表中。我什至可以在Table1 和Table2 之间建立父/子关系。但是当我查看生成的代码时,Table1 仍然与Table2 没有任何关系,我觉得这最令人困惑。
我是否在某处遗漏了一步?有没有更好/推荐的方法?
谢谢!
稍后...
按照一个人的建议,我尝试通过复制同一数据库中相关对象的所有结构来使用访问Table2 所需的所有方法填充Table1 的部分类。
这实际上适用于读取,但是当我尝试更新或插入记录时,我得到了一个异常:
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 上,然后提交更改时,它会尝试将 new 记录插入Table2,这显然会导致 PK 违规。知道为什么会发生这种情况,以及如何解决吗?
【问题讨论】:
标签: c# linq linq-to-sql views or-designer