我们在SQL Server数据库中有自定义类型。
使用此类型的目的是用于查询,其中我们查找具有提供的标识符的记录。
我们有很多类似上面的查询,使用不同的标识符列表多次调用,通过将标识符列表作为SQL参数提供,我们可以提高查询的性能,因为SQL Server将使用已编译的SQL查询,而不是仅因为标识符列表发生变化而编译新的查询。
该方法生成带有“硬编码”标识符的 SQL(请参见以下内容),当使用不同的标识符调用同一方法时,生成的查询将会不同,这将“强制”SQL Server重新编译查询,而我们正试图避免这种情况。
我们仍然可以通过手动构建查询来使用我们的原始方法,但是此时我们希望避免这样做,因为我们想能够通过连接其他表“即时”地构建不同的查询(使用EF Core查询扩展方法),而不需要为每个表显式引入单独的“构建查询”,其中我们使用类似的'WHERE'条件。
CREATE TYPE dbo.UniqueIdentifiers AS TABLE (Identifier UNIQUEIDENTFIER)
使用此类型的目的是用于查询,其中我们查找具有提供的标识符的记录。
SELECT * FROM MyRecords WHERE Id IN (@GivenIdentifiers)
我们有很多类似上面的查询,使用不同的标识符列表多次调用,通过将标识符列表作为SQL参数提供,我们可以提高查询的性能,因为SQL Server将使用已编译的SQL查询,而不是仅因为标识符列表发生变化而编译新的查询。
现在我们将使用EF Core作为我们应用程序的工作单元,并与SQL Server数据库一起使用,但我无法找到一种方法来使用EF Core查询语法消耗表值参数。
此时我们有:
public Order[] LoadOrders(params Guid[] identifiers)
{
return context.Orders.Where(order => identifiers.Contains(order.Id)).ToArray();
}
该方法生成带有“硬编码”标识符的 SQL(请参见以下内容),当使用不同的标识符调用同一方法时,生成的查询将会不同,这将“强制”SQL Server重新编译查询,而我们正试图避免这种情况。
SELECT * FROM MyRecords WHERE Id IN ('1234abcd-...', '1234abce-...')
我们仍然可以通过手动构建查询来使用我们的原始方法,但是此时我们希望避免这样做,因为我们想能够通过连接其他表“即时”地构建不同的查询(使用EF Core查询扩展方法),而不需要为每个表显式引入单独的“构建查询”,其中我们使用类似的'WHERE'条件。
我们如何在EF Core中使用表值参数?
exec
)来使用Execute
。 - undefinedFromSqlRaw
或FromSql
,使用直接查询。 - undefined