<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Efcore on Ravindra Devrani</title><link>https://ravindradevrani.com/tags/efcore/</link><description>Recent content in Efcore on Ravindra Devrani</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 29 Dec 2025 11:19:51 +0530</lastBuildDate><atom:link href="https://ravindradevrani.com/tags/efcore/index.xml" rel="self" type="application/rss+xml"/><item><title>Dotnet Core API Crud With Mysql and EF Core</title><link>https://ravindradevrani.com/posts/dotnet-core-api-crud-with-mysql-efcore/</link><pubDate>Mon, 29 Dec 2025 11:19:51 +0530</pubDate><guid>https://ravindradevrani.com/posts/dotnet-core-api-crud-with-mysql-efcore/</guid><description>&lt;p>In this tutorial, we are going to make dotnet core web api application and perform all the CRUD (create, read, update and delete). I have tried to keep it simple and avoided any complexities like repository pattern.&lt;/p>
&lt;p>&lt;a href="https://github.com/rd003/DotnetPracticeDemos/tree/master/BlogDemos/MySqlEfCore">💻Source code&lt;/a>&lt;/p>
&lt;h2 id="tech-and-tools-used">Tech and tools used&lt;/h2>
&lt;ul>
&lt;li>Dotnet 10&lt;/li>
&lt;li>MySql 8+ (in docker container. Click &lt;a href="https://ravindradevrani.com/posts/mysql-in-docker/">here&lt;/a>, if you want to create a MySql container in docker)&lt;/li>
&lt;li>Entity Framework Core (ORM)&lt;/li>
&lt;li>.NET CLI and VS Code (alternate Visual Studio 2025)&lt;/li>
&lt;/ul>
&lt;h2 id="creating-a-project">Creating a project&lt;/h2>
&lt;p>Execute these commands in a sequence.&lt;/p></description></item><item><title>Cartesian Explosion and Split Query in Entity Framework Core</title><link>https://ravindradevrani.com/posts/cartesian-explosion-and-split-query-in-entity-framework-core/</link><pubDate>Sun, 07 Dec 2025 20:03:37 +0530</pubDate><guid>https://ravindradevrani.com/posts/cartesian-explosion-and-split-query-in-entity-framework-core/</guid><description>&lt;!-- raw HTML omitted -->
&lt;p>In this tutorial, we will understand what cartesian explosion is and how to solve that problem. Let&amp;rsquo;s look at this query:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cs" data-lang="cs">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">var&lt;/span> people = &lt;span style="color:#66d9ef">await&lt;/span> ctx.People
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .Include(p =&amp;gt; p.Emails)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .Include(p =&amp;gt; p.Addresses)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .ToListAsync();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It translates to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">SELECT&lt;/span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;FirstName&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;LastName&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonEmail&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonId&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonAddress&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonId&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">FROM&lt;/span> &lt;span style="color:#e6db74">&amp;#34;People&amp;#34;&lt;/span> &lt;span style="color:#66d9ef">AS&lt;/span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">LEFT&lt;/span> &lt;span style="color:#66d9ef">JOIN&lt;/span> &lt;span style="color:#e6db74">&amp;#34;Emails&amp;#34;&lt;/span> &lt;span style="color:#66d9ef">AS&lt;/span> &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span> &lt;span style="color:#66d9ef">ON&lt;/span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonId&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">LEFT&lt;/span> &lt;span style="color:#66d9ef">JOIN&lt;/span> &lt;span style="color:#e6db74">&amp;#34;Addresses&amp;#34;&lt;/span> &lt;span style="color:#66d9ef">AS&lt;/span> &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span> &lt;span style="color:#66d9ef">ON&lt;/span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;PersonId&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">ORDER&lt;/span> &lt;span style="color:#66d9ef">BY&lt;/span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>.&lt;span style="color:#e6db74">&amp;#34;Id&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>Person&lt;/code> joins with &lt;code>Email&lt;/code> and &lt;code>Address&lt;/code>. Both joins are at the same level.&lt;/li>
&lt;li>A person can have multiple emails and adressess.&lt;/li>
&lt;/ul>
&lt;p>Let&amp;rsquo;s say a person with id = 1 have 10 emails and 10 addresses. The query returns 1x10x10 = 100 rows for 1 person. It is just for one person, how much they can be for 100 people. This problem is known as &lt;code>cartesian explosion&lt;/code>&lt;/p></description></item></channel></rss>