EF Core查询标签TagWith
生活随笔
收集整理的這篇文章主要介紹了
EF Core查询标签TagWith
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
在使用EF Core的時候,有時候我們需要追蹤它生成的sql語句,那么方法那么多,我們怎么知道對應的sql語句是在代碼哪里呢,這時候就需要一個備注,
TagWith()能夠幫助我們生成對應的注釋信息。查詢標記有助于將代碼中的LINQ查詢與日志中捕獲的生成的SQL查詢相關聯。您使用新TagWith()方法注釋LINQ查詢:EF Core 2.2+中的TagWith是一項出色的功能,可以跟蹤查詢存儲區中的查詢,但您必須記住將其添加到所有查詢中。
實現方法
var myLocation = new Point(1, 2); var nearestPeople = (from f in context.People.TagWith("This is my spatial query!")orderby f.Location.Distance(myLocation) descendingselect f).Take(5).ToList();此LINQ查詢被轉換為以下SQL語句:
-- This is my spatial query!SELECT TOP(@__p_1) [p].[Id], [p].[Location] FROM [People] AS [p] ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC可以TagWith()在同一查詢上多次調用。查詢標簽是累積的。例如,給定以下方法:
private static IQueryable<Person> GetNearestPeople(SpatialContext context, Point myLocation)=> from f in context.People.TagWith("GetNearestPeople")orderby f.Location.Distance(myLocation) descendingselect f;private static IQueryable<T> Limit<T>(IQueryable<T> source, int limit) => source.TagWith("Limit").Take(limit);以下查詢:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToList();轉換為:
-- GetNearestPeople-- LimitSELECT TOP(@__p_1) [p].[Id], [p].[Location] FROM [People] AS [p] ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC也可以使用多行字符串作為查詢標簽。例如:
var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith(@"This is a multi-line string").ToList();產生以下SQL:
-- GetNearestPeople-- Limit-- This is a multi-line -- stringSELECT TOP(@__p_1) [p].[Id], [p].[Location] FROM [People] AS [p] ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC查詢標簽不可參數化:EF Core始終將LINQ查詢中的查詢標簽視為包含在生成的SQL中的字符串文字。不允許將查詢標記作為參數的已編譯查詢。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的EF Core查询标签TagWith的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再见!微软宣布终止对旧版 Microso
- 下一篇: 在 .NET Core 中使用 View