gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:27:58 25 4
gpt4 key购买 nike

我是 Linq 的新手,我找不到任何文档来帮助我解决这个看似微不足道的问题 - 所以非常感谢您的帮助!

我有一张 table Table1在数据库中DB1 , 它有一个“伪”外键 Table2ID到表 Table2在数据库中DB2 ,在同一台服务器上。 “伪”,因为显然我不能拥有跨越两个数据库的实际 FK。

现在我正在使用 O/R 设计器,我喜欢将数据库对象引入设计器时生成所有关系的方式……非常酷!我想要我的 Table1对象与 Table2 有关系,就像它与 DB1 中所有“真实的”外键相关对象都有关系一样.但是我不能带Table2进入我的数据库图表,因为它在错误的数据库中。

为了对此进行综合,我尝试创建一个 View Table2DB1 ,这就是 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,我发现您需要手动在 View 上创建主键。但还有另一个问题:出于某种原因,当您从 View 中加载一个值时 Table2并将其设置在新记录上 Table1 ,然后提交更改,它会尝试将 记录插入到 Table2 中,这显然会导致 PK 违规。知道为什么会发生这种情况,以及如何解决它吗?

最佳答案

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

关于c# - 如何使用 Linq 连接不同数据库中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com