如何通过一个数据库往返执行两个 EF linq 查询
Posted
技术标签:
【中文标题】如何通过一个数据库往返执行两个 EF linq 查询【英文标题】:How to execute two EF linq query with one db round trip 【发布时间】:2017-12-08 10:44:43 【问题描述】:当我们使用 ado.net 时,我们可以传递多个用逗号分隔的 sql。这是一个例子。
SqlConnection connection = new SqlConnection();
SqlCommand command = new SqlCommand();
connection.ConnectionString = connectionString; // put your connection string
command.CommandText = @"
update table
set somecol = somevalue;
insert into someTable values(1,'test');";
command.CommandType = CommandType.Text;
command.Connection = connection;
try
connection.Open();
finally
command.Dispose();
connection.Dispose();
我想知道如何构建基于 EF linq 的查询,该查询将从多个表中获取数据,但两个表之间没有关系。所以我们不能执行join。
所以给我看一个例子,其中 EF 将从学生和产品表中获取数据,而无需任何连接,一次 db 往返。根据我上面的例子,ado.net 有可能吗?
var query = from data in context.Student
orderby data.name
select data;
var query = from data in context.Product
orderby data.name
select data;
当运行上述两个查询时,将发生两次数据库往返还是一次?
我需要从名为 student 和 product 的两个表中获取数据,其中一个 db 往返就像我上面的 EF linq 查询一样。
如果可能,然后与示例代码讨论。谢谢
【问题讨论】:
无!!!在您使用变量查询之前,查询不会执行。 【参考方案1】:开箱即用不支持此功能,但存在启用此功能的“未来查询”包:https://www.nuget.org/packages/Z.EntityFramework.Plus.QueryFuture.EF6/
【讨论】:
能否添加一个使用 QueryFuture.EF6 插件从 2 个表中获取数据的示例。我检查了他们的网站,但没有找到类似的例子。 在github.com/zzzprojects/EntityFramework-Plus/wiki/…有例子 你在说这个例程吗` var ctx = new EntitiesContext(); var futureCountries = ctx.Countries.Where(x => x.IsActive).Future(); var futureStates = ctx.States.Where(x => x.IsActive).Future(); var country = futureCountries.ToList(); var states = futureStates.ToList();` 看到有两个单独的 ToList() 像futureCountries.ToList() and futureStates.ToList() and
...我猜两个数据库往返会发生。请告诉我会发生什么?
两个查询的 db 往返将发生在第一个 ToList() 上以上是关于如何通过一个数据库往返执行两个 EF linq 查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 EF 和 Linq 通过另一个表字段值的值在表中查找字段