{"id":393,"date":"2021-08-30T12:48:18","date_gmt":"2021-08-30T04:48:18","guid":{"rendered":"https:\/\/www.tonghin.com.my\/blog\/?p=393"},"modified":"2021-08-30T12:48:20","modified_gmt":"2021-08-30T04:48:20","slug":"ef-core-performance","status":"publish","type":"post","link":"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/","title":{"rendered":"EF Core Performance"},"content":{"rendered":"\n<p>Last week , I worked on optimizing the runtime of loading inventory items . The problem is a <strong>&#8220;Cartesian Explosion&#8221;<\/strong> that is related to performing joins . When we perform a join , one&#8217;s table repeat the X number of time the matched records of another joined table . There are a few ways to avoid the cartesian explosion especially when loading related entities in a huge database :-<\/p>\n\n\n\n<ol><li><code>AsSplitQuery()<\/code> introduced by EF core 5.0 . It only works when using <code>Include()<\/code>. Instead of joining the tables , split queries generate additional SQL query instead of single queries .<\/li><li><code>IncludeOptimized()<\/code> introduced by EF core pro . It works similarly to the first method as it drastically decreases the amount of data transferred to avoid generating excessive data that is needed .<\/li><li>Explicitly loading the data needed in the single query .<\/li><\/ol>\n\n\n\n<p>In conclusion , unfortunately there isn&#8217;t one solid solution for loading all entities that fit every scenario . <code>IncludeOptimized()<\/code> does not support <code>AsNoTracking()<\/code> and cannot be mixed with <code>Include()<\/code> . In hindsight , explicit loading should be the way to fix the cartesian explosion problem as there are limitations to using built in functions .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last week , I worked on optimizing the runtime of loading inventory items . The problem is a &#8220;Cartesian Explosion&#8221; that is related to performing joins . When we perform a join , one&#8217;s table repeat the X number of time the matched records of another joined table . There are a few ways to &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;EF Core Performance&#8221;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[15,95],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>EF Core Performance | Tong Hin&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EF Core Performance | Tong Hin&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"Last week , I worked on optimizing the runtime of loading inventory items . The problem is a &#8220;Cartesian Explosion&#8221; that is related to performing joins . When we perform a join , one&#8217;s table repeat the X number of time the matched records of another joined table . There are a few ways to &hellip; Continue reading &quot;EF Core Performance&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\" \/>\n<meta property=\"og:site_name\" content=\"Tong Hin&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-30T04:48:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-30T04:48:20+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"1 minute\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#organization\",\"name\":\"TONG HIN MACHINERY\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/\",\"sameAs\":[\"https:\/\/www.youtube.com\/channel\/UC60EoxJMNbu8mV0LuEGfrBg\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/wp-content\/uploads\/2020\/10\/web_logo_180_180.jpg\",\"width\":180,\"height\":180,\"caption\":\"TONG HIN MACHINERY\"},\"image\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#website\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/\",\"name\":\"Tong Hin&#039;s Blog\",\"description\":\"Sharing About Technology\",\"publisher\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.tonghin.com.my\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#webpage\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\",\"name\":\"EF Core Performance | Tong Hin&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#website\"},\"datePublished\":\"2021-08-30T04:48:18+00:00\",\"dateModified\":\"2021-08-30T04:48:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\",\"url\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/\",\"name\":\"EF Core Performance\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#\/schema\/person\/edf00f798aa3304d5b1c2f40ca0bc301\"},\"headline\":\"EF Core Performance\",\"datePublished\":\"2021-08-30T04:48:18+00:00\",\"dateModified\":\"2021-08-30T04:48:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#organization\"},\"keywords\":\"efcore,optimization\",\"articleSection\":\"Experiential\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.tonghin.com.my\/blog\/2021\/08\/30\/ef-core-performance\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#\/schema\/person\/edf00f798aa3304d5b1c2f40ca0bc301\",\"name\":\"Wang Qi Le\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.tonghin.com.my\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4f522ad020f37316008f6f8757e45090?s=96&d=mm&r=g\",\"caption\":\"Wang Qi Le\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/posts\/393"}],"collection":[{"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/comments?post=393"}],"version-history":[{"count":2,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/posts\/393\/revisions"}],"predecessor-version":[{"id":395,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/posts\/393\/revisions\/395"}],"wp:attachment":[{"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/media?parent=393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/categories?post=393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tonghin.com.my\/blog\/wp-json\/wp\/v2\/tags?post=393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}