【问题标题】:Use multiple huge databases in one Entity Framework Core query with SQL Server?在 SQL Server 的一个 Entity Framework Core 查询中使用多个大型数据库?
【发布时间】:2019-10-28 23:24:25
【问题描述】:

我想用 1 或 2 个 dbcontext 在一个查询中查询来自不同数据库的多个表。我一直在寻找一些信息,要让它完美运行似乎并不容易。

我需要同时对来自 3 或 4 个不同数据库的 5 或 6 个表进行多次查询。

  • 我尝试在另一个数据库中使用 dbcontext 的实现,但是如果我只使用一个数据库,我会遇到主键问题。
  • 我已经分别尝试了 2 个dbcontext,但出现错误:

不能在单个查询执行消息中使用多个 DbContext 实例。

我读到我可以关联 2 个数据库,但由于我的企业结构,我不能这样做,而且它不允许我这样做。

这是在 Entity Framework Core 2.2 或 3 中,我已经尝试过。我已经创建了数据库,所以我搭建了它们。

我有一个例子,只有 2 个数据库:

var data =
   from j in jsa.TbEmp
   join i in info.TbcEmpGral on j.fiEmp equals i.fiEmp
   where i.fiEmp == 361591
   select i.FcName.ToString() + " - " + i.fiDate.ToString();

【问题讨论】:

  • 非常糟糕,尤其是因为您拥有“巨大”的数据库。这将异常缓慢且资源密集。我建议您研究一种将所有数据复制到单个数据库中然后进行查询的方法。
  • 我的团队希望迁移到 EFC 以获得更大的代码灵活性。我们正在尝试查看哪种 ORM 更好并且更适合我们的需求,因为我们使用庞大的预算和成本控制数据库。由于在将 sql 查询映射到对象并在必要时嵌入 SQL 语法时具有灵活性,我们正在进入 EFC。我无法将一个数据库的所有数据复制到另一个数据库,因为有很多,而企业不允许我这样做。
  • 这些数据库是在一台还是多台服务器上?
  • 他们在一台服务器上。

标签: c# sql-server orm entity-framework-core asp.net-core-2.2


【解决方案1】:

我想在一个查询中从不同数据库 [在一台服务器上] 查询多个表

最简单的方法是为单个数据库中的所有表创建视图或同义词。 EF 将无法自动构建模型,但如果您手动创建模型,EF 将简单地将 SQL 发送到单个数据库好像它包含所有表,并且 SQL Server 将重定向通过同义词或视图对适当对象的查询。

【讨论】:

  • 谢谢。我正在考虑创建实体框架和视图的组合,因为我发现仅使用 EFC 没有简单的方法来处理此场景。
  • 管理这种场景的一种合理简单的方法是创建一个开发数据库,​​该数据库具有具有所有正确主键和外键的空表,并为其搭建支架。然后在运行时将您的 DbContext 指向具有视图、同义词和表的某种组合的数据库。
  • 这很有道理,实际上。你建议在某个时候使用 sp 吗?只是为了一些具体的事情还是根本不?
  • 将存储过程用于 EF 无法有效支持的批处理和复杂查询,并作为 LINQ 速度太慢的性能关键型查询的优化。
  • 感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2022-12-09
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多