【发布时间】:2020-09-18 13:46:34
【问题描述】:
使用 dapper 可以很容易地一次运行多个查询:
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;";
using (var connection = My.ConnectionFactory())
{
connection.Open();
using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1}))
{
var invoice = multi.Read<Invoice>().First();
var invoiceItems = multi.Read<InvoiceItem>().ToList();
}
}
如何使用 EFCore 进行归档?
我找到了类似的解决方案
var query = from _ in db.Invoices
select new {
Invoice = db.Invoices.Single(x=>x.InvoiceId == 1),
InvoiceItems = db.InvoiceItems.Where(x=>x.InvoiceId == 1),
}
但这不起作用。 我可以在分析中看到这在两个连接中运行两个查询。我什至可以看到连接没有被重用(为什么?)。
如何使用 EFCore 运行多个查询这是 EFCore 的一大性能缺陷吗? 谢谢。
【问题讨论】:
-
为什么要关心是一批还是两批?为什么不使用急切加载:例如
db.Invoces.Include(i => i.InvoiceItems).Where(i => InvoiceId ==1); -
你是对的,这里的样本不是最好的。该问题应解释为“如何对同一张或不同一张表运行多个查询”。我有多个目的,例如多次计数。但是像 stackoverflow.com/questions/51114437/… 这样的解决方案不适用于 EFCore,因为在这种情况下 GroupBy 没有映射。
标签: entity-framework