<!DOCTYPE html><html lang="en-US" class="no-js"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="stylesheet" media="print" onload="this.onload=null;this.media='all';" id="ao_optimized_gfonts" href="https://fonts.googleapis.com/css?family=Noto+Sans%3A400italic%2C700italic%2C400%2C700%7CNoto+Serif%3A400italic%2C700italic%2C400%2C700%7CInconsolata%3A400%2C700&amp;display=swap"><link rel="profile" href="https://gmpg.org/xfn/11"><link rel="pingback" href="https://davecallan.com/xmlrpc.php"> <!--[if lt IE 9]> <script src="https://davecallan.com/wp-content/themes/twentyfifteen/js/html5.js?ver=3.7.0"></script> <![endif]--><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <script id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/98d318bd5128a6f5fbb7fc79/script.js"></script><link media="all" href="https://davecallan.com/wp-content/cache/autoptimize/css/autoptimize_042eec5de5c1ab4712b54ed734233ada.css" rel="stylesheet"><title>.NET, Visual Studio and Entity Framework blog</title><meta name="description" content=".NET blog with close to 300 posts on .NET ecosystem topics such as .NET, C#, Entity Framework, SQL Server, Visual Studio and Azure as well as miscellaneous software development topics." /><link rel="canonical" href="https://davecallan.com/" /><link rel="next" href="https://davecallan.com/page/2/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="website" /><meta property="og:title" content=".NET Blog" /><meta property="og:description" content=".NET blog with close to 300 posts on .NET ecosystem topics such as .NET, C#, Entity Framework, SQL Server, Visual Studio and Azure as well as miscellaneous software development topics." /><meta property="og:url" content="https://davecallan.com/" /><meta property="og:site_name" content=".NET Blog" /><meta name="twitter:card" content="summary_large_image" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://davecallan.com/","url":"https://davecallan.com/","name":".NET, Visual Studio and Entity Framework blog","isPartOf":{"@id":"https://davecallan.com/#website"},"description":".NET blog with close to 300 posts on .NET ecosystem topics such as .NET, C#, Entity Framework, SQL Server, Visual Studio and Azure as well as miscellaneous software development topics.","breadcrumb":{"@id":"https://davecallan.com/#breadcrumb"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https://davecallan.com/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://davecallan.com/#website","url":"https://davecallan.com/","name":".NET Blog","description":"450+ posts on Azure, C#, Entity Framework, .NET, Software Engineering and Visual Studio","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://davecallan.com/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script> <link rel='dns-prefetch' href='//www.googletagmanager.com' /><link href='https://fonts.gstatic.com' crossorigin rel='preconnect' /><link rel="alternate" type="application/rss+xml" title=".NET Blog &raquo; Feed" href="https://davecallan.com/feed/" /><link rel="alternate" type="application/rss+xml" title=".NET Blog &raquo; Comments Feed" href="https://davecallan.com/comments/feed/" /> <!--[if lt IE 9]><link rel='stylesheet' id='twentyfifteen-ie-css' href='https://davecallan.com/wp-content/themes/twentyfifteen/css/ie.css?ver=20170916' media='all' /> <![endif]--> <!--[if lt IE 8]><link rel='stylesheet' id='twentyfifteen-ie7-css' href='https://davecallan.com/wp-content/themes/twentyfifteen/css/ie7.css?ver=20141210' media='all' /> <![endif]-->  <script src="https://www.googletagmanager.com/gtag/js?id=G-08JPG8152Z" id="google_gtagjs-js" async></script> <link rel="https://api.w.org/" href="https://davecallan.com/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://davecallan.com/xmlrpc.php?rsd" /><meta name="generator" content="WordPress 6.7.5" /><meta name="generator" content="Site Kit by Google 1.144.0" /></head><body data-rsssl=1 class="home blog custom-background wp-embed-responsive"><div id="page" class="hfeed site"> <a class="skip-link screen-reader-text" href="#content">Skip to content</a><div id="sidebar" class="sidebar"><header id="masthead" class="site-header"><div class="site-branding"><h1 class="site-title"><a href="https://davecallan.com/" rel="home">.NET Blog</a></h1><p class="site-description">450+ posts on Azure, C#, Entity Framework, .NET, Software Engineering and Visual Studio</p> <button class="secondary-toggle">Menu and widgets</button></div></header><div id="secondary" class="secondary"><div id="widget-area" class="widget-area" role="complementary"><aside id="text-2" class="widget widget_text"><h2 class="widget-title">Dave Callan</h2><div class="textwidget"><p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-3340 size-medium" src="https://davecallan.com/wp-content/uploads/2022/06/85-ppz8yg0koww0gssg-85-289x300.jpg" alt="" width="289" height="300" srcset="https://davecallan.com/wp-content/uploads/2022/06/85-ppz8yg0koww0gssg-85-289x300.jpg 289w, https://davecallan.com/wp-content/uploads/2022/06/85-ppz8yg0koww0gssg-85-768x797.jpg 768w, https://davecallan.com/wp-content/uploads/2022/06/85-ppz8yg0koww0gssg-85-987x1024.jpg 987w" sizes="(max-width: 289px) 100vw, 289px" />I&#8217;m a Senior Software Engineer, Architect and Technical Lead with 20 years experience with the .NET stack and related technologies.</p><p>In 2024 I became a Microsoft MVP in the <em>.NET</em> and <em>Developer Tools</em> areas in recognition of my contributions to the community.</p><p><noscript><img decoding="async" class="aligncenter wp-image-7094 size-full" src="https://davecallan.com/wp-content/uploads/2025/01/mvp-image.png" alt="" width="751" height="303" srcset="https://davecallan.com/wp-content/uploads/2025/01/mvp-image.png 751w, https://davecallan.com/wp-content/uploads/2025/01/mvp-image-300x121.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></noscript><img decoding="async" class="lazyload aligncenter wp-image-7094 size-full" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20751%20303%22%3E%3C/svg%3E' data-src="https://davecallan.com/wp-content/uploads/2025/01/mvp-image.png" alt="" width="751" height="303" data-srcset="https://davecallan.com/wp-content/uploads/2025/01/mvp-image.png 751w, https://davecallan.com/wp-content/uploads/2025/01/mvp-image-300x121.png 300w" data-sizes="(max-width: 751px) 100vw, 751px" /></p><p>&nbsp;</p><p><a href="https://twitter.com/Dave_DotNet" target="_blank" rel="noopener"><noscript><img decoding="async" class="aligncenter wp-image-6110 size-full" src="https://davecallan.com/wp-content/uploads/2023/02/twitter-handler.png" alt="" width="302" height="67" srcset="https://davecallan.com/wp-content/uploads/2023/02/twitter-handler.png 302w, https://davecallan.com/wp-content/uploads/2023/02/twitter-handler-300x67.png 300w" sizes="(max-width: 302px) 100vw, 302px" /></noscript><img decoding="async" class="lazyload aligncenter wp-image-6110 size-full" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20302%2067%22%3E%3C/svg%3E' data-src="https://davecallan.com/wp-content/uploads/2023/02/twitter-handler.png" alt="" width="302" height="67" data-srcset="https://davecallan.com/wp-content/uploads/2023/02/twitter-handler.png 302w, https://davecallan.com/wp-content/uploads/2023/02/twitter-handler-300x67.png 300w" data-sizes="(max-width: 302px) 100vw, 302px" /></a><a href="https://www.linkedin.com/in/davidcallan/" target="_blank" rel="noopener"><noscript><img decoding="async" class="aligncenter size-full wp-image-7095" src="https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x.png" alt="" width="144" height="144" srcset="https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x.png 144w, https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x-120x120.png 120w" sizes="(max-width: 144px) 100vw, 144px" /></noscript><img decoding="async" class="lazyload aligncenter size-full wp-image-7095" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20144%20144%22%3E%3C/svg%3E' data-src="https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x.png" alt="" width="144" height="144" data-srcset="https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x.png 144w, https://davecallan.com/wp-content/uploads/2025/01/In-Blue-72@2x-120x120.png 120w" data-sizes="(max-width: 144px) 100vw, 144px" /></a></p></div></aside><aside id="nav_menu-2" class="widget widget_nav_menu"><nav class="menu-homepage-container" aria-label="Menu"><ul id="menu-homepage" class="menu"><li id="menu-item-707" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-707"><a href="https://davecallan.com" aria-current="page" title="Return to the home page">BACK TO BLOG HOMEPAGE !!!</a></li></ul></nav></aside><aside id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://davecallan.com/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search &hellip;" value="" name="s" /> </label> <input type="submit" class="search-submit screen-reader-text" value="Search" /></form></aside><aside id="recent-posts-2" class="widget widget_recent_entries"><h2 class="widget-title">Recent Posts</h2><nav aria-label="Recent Posts"><ul><li> <a href="https://davecallan.com/configuring-private-constructors-and-setters-with-entity-framework-db-first-flow/">Configuring Private Constructors and Setters with Entity Framework DB First flow</a> <span class="post-date">March 7, 2026</span></li><li> <a href="https://davecallan.com/entity-framework-query-flow-explained-with-sequence-diagram/">Entity Framework Query Flow Explained—Step-by-Step with a Sequence Diagram</a> <span class="post-date">February 8, 2025</span></li><li> <a href="https://davecallan.com/dotnet-caching-one-second-really-make-difference/">.NET Caching: Can a One Second Cache Really Make a Difference?</a> <span class="post-date">February 1, 2025</span></li><li> <a href="https://davecallan.com/implementing-hybridcache-fusioncache-v2-dotnet-9/">Implementing HybridCache with FusionCache v2 in .NET 9</a> <span class="post-date">January 28, 2025</span></li><li> <a href="https://davecallan.com/install-scalar-dotnet-9/">How to install Scalar in .NET 9</a> <span class="post-date">January 25, 2025</span></li><li> <a href="https://davecallan.com/visual-studio-http-file-request-variable-example/">Visual Studio .http file request variable example</a> <span class="post-date">January 23, 2025</span></li><li> <a href="https://davecallan.com/add-swaggerui-back-dotnet-9-web-api-project/">How to add SwaggerUI back into a .NET 9 Web API project</a> <span class="post-date">January 23, 2025</span></li><li> <a href="https://davecallan.com/monitor-visual-studio-dev-tunnel-traffic-realtime/">Monitor Visual Studio Dev Tunnel traffic in real-time</a> <span class="post-date">January 23, 2025</span></li><li> <a href="https://davecallan.com/getting-started-visual-studio-2022-dev-tunnels/">Getting started with Visual Studio 2022 Dev Tunnels</a> <span class="post-date">January 23, 2025</span></li><li> <a href="https://davecallan.com/handling-github-webhooks-azure-functions-testing-integration-visual-studio-dev-tunnels/">Handling GitHub Webhooks with Azure Functions and testing integration with Visual Studio Dev Tunnels</a> <span class="post-date">January 21, 2025</span></li><li> <a href="https://davecallan.com/numerical-stringcomparer-dotnet-10/">Numerical StringComparer coming in .NET 10</a> <span class="post-date">January 19, 2025</span></li><li> <a href="https://davecallan.com/aspnet-ioptions-pattern-example/">ASP.NET IOptions pattern example</a> <span class="post-date">January 19, 2025</span></li><li> <a href="https://davecallan.com/rest-api-return-204-no-content-404-not-found-http-delete-request-when-item-delete-already-deleted/">In a REST API should we return 204 (No Content) or 404 (Not Found) for a HTTP DELETE request when the item to delete is already deleted?</a> <span class="post-date">January 18, 2025</span></li><li> <a href="https://davecallan.com/aspnet-rate-limiting-middleware-simple-examples/">ASP.NET Rate Limiting middleware simple examples</a> <span class="post-date">January 18, 2025</span></li><li> <a href="https://davecallan.com/when-to-avoid-tolist-tolistasych-entity-framework/">When to avoid ToList() / ToListAsych() in Entity Framework?</a> <span class="post-date">January 18, 2025</span></li><li> <a href="https://davecallan.com/view-entity-framework-db-query-plans-directly-inside-visual-studio/">View Entity Framework DB query plans directly inside Visual Studio</a> <span class="post-date">January 18, 2025</span></li><li> <a href="https://davecallan.com/what-are-discriminated-unions/">What are Discriminated Unions?</a> <span class="post-date">January 17, 2025</span></li><li> <a href="https://davecallan.com/discriminated-unions-csharp-update/">Discriminated Unions in C# design update (Jan 2025)</a> <span class="post-date">January 17, 2025</span></li><li> <a href="https://davecallan.com/dotnet-10-support-openapi-v31/">.NET 10 will support OpenAPI v3.1</a> <span class="post-date">January 17, 2025</span></li><li> <a href="https://davecallan.com/return-problemdetails-aspnet8-iexceptionhandler-global-exception-handler/">Return ProblemDetails from ASP.NET 8 IExceptionHandler global exception handler</a> <span class="post-date">March 2, 2024</span></li></ul></nav></aside><aside id="nav_menu-4" class="widget widget_nav_menu"><nav class="menu-homepage-container" aria-label="Menu"><ul id="menu-homepage-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-707"><a href="https://davecallan.com" aria-current="page" title="Return to the home page">BACK TO BLOG HOMEPAGE !!!</a></li></ul></nav></aside><aside id="categories-2" class="widget widget_categories"><h2 class="widget-title">Categories</h2><nav aria-label="Categories"><ul><li class="cat-item cat-item-41"><a href="https://davecallan.com/category/dotnet/">.NET Core Blog</a> (116)</li><li class="cat-item cat-item-12"><a href="https://davecallan.com/category/asp-net-mvc/">ASP.Net MVC</a> (12)</li><li class="cat-item cat-item-23"><a href="https://davecallan.com/category/automapper/">Automapper</a> (6)</li><li class="cat-item cat-item-40"><a href="https://davecallan.com/category/azure/">Azure Blog</a> (29)</li><li class="cat-item cat-item-50"><a href="https://davecallan.com/category/benchmarkdotnet/">BenchmarkDotNet</a> (14)</li><li class="cat-item cat-item-18"><a href="https://davecallan.com/category/csharp/">C# Blog</a> (58)</li><li class="cat-item cat-item-9"><a href="https://davecallan.com/category/databases/">Databases</a> (43)<ul class='children'><li class="cat-item cat-item-11"><a href="https://davecallan.com/category/databases/sql-server/">SQL Server Blog</a> (38)</li></ul></li><li class="cat-item cat-item-6"><a href="https://davecallan.com/category/deployment/">Deployment</a> (9)</li><li class="cat-item cat-item-31"><a href="https://davecallan.com/category/design-patterns/">Design Patterns</a> (25)</li><li class="cat-item cat-item-16"><a href="https://davecallan.com/category/entity-framework/">Entity Framework Blog</a> (87)</li><li class="cat-item cat-item-48"><a href="https://davecallan.com/category/eshoponweb/">eShopOnWeb</a> (17)</li><li class="cat-item cat-item-42"><a href="https://davecallan.com/category/frontend/">Frontend</a> (13)</li><li class="cat-item cat-item-39"><a href="https://davecallan.com/category/performance-improvement/">Performance Improvement</a> (26)</li><li class="cat-item cat-item-46"><a href="https://davecallan.com/category/software-architecture/">Software Architecture</a> (32)</li><li class="cat-item cat-item-3"><a href="https://davecallan.com/category/software-development/">Software Development</a> (48)</li><li class="cat-item cat-item-17"><a href="https://davecallan.com/category/ssis/">SSIS</a> (5)</li><li class="cat-item cat-item-47"><a href="https://davecallan.com/category/testing/">Testing</a> (12)</li><li class="cat-item cat-item-5"><a href="https://davecallan.com/category/visual-studio/">Visual Studio Blog</a> (98)</li><li class="cat-item cat-item-45"><a href="https://davecallan.com/category/vs-code/">VS Code</a> (4)</li><li class="cat-item cat-item-34"><a href="https://davecallan.com/category/web-application-security/">Web Application Security</a> (3)</li><li class="cat-item cat-item-15"><a href="https://davecallan.com/category/wordpress/">WordPress</a> (3)</li></ul></nav></aside><aside id="nav_menu-3" class="widget widget_nav_menu"><nav class="menu-homepage-container" aria-label="Menu"><ul id="menu-homepage-2" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-707"><a href="https://davecallan.com" aria-current="page" title="Return to the home page">BACK TO BLOG HOMEPAGE !!!</a></li></ul></nav></aside></div></div></div><div id="content" class="site-content"><div id="primary" class="content-area"><main id="main" class="site-main"><article id="post-6634" class="post-6634 post type-post status-publish format-standard sticky hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/please-follow-me-on-twitter-and-linkedin-for-more-dotnet-content/" rel="bookmark">Please follow me on X/Twitter and LinkedIn for more .NET content</a></h2></header><div class="entry-content"><p>I post .NET / C# and Visual Studio content on LinkedIn and X/Twitter almost daily. Please consider following me. LinkedIn &hellip; <a href="https://davecallan.com/please-follow-me-on-twitter-and-linkedin-for-more-dotnet-content/" class="more-link">Continue reading <span class="screen-reader-text">Please follow me on X/Twitter and LinkedIn for more .NET content</span></a></p></div><footer class="entry-footer"> <span class="sticky-post">Featured</span><span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/please-follow-me-on-twitter-and-linkedin-for-more-dotnet-content/" rel="bookmark"><time class="entry-date published" datetime="2023-08-13T19:55:56+00:00">August 13, 2023</time><time class="updated" datetime="2025-01-19T00:08:03+00:00">January 19, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/please-follow-me-on-twitter-and-linkedin-for-more-dotnet-content/#comments">1 Comment<span class="screen-reader-text"> on Please follow me on X/Twitter and LinkedIn for more .NET content</span></a></span></footer></article><article id="post-7871" class="post-7871 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/configuring-private-constructors-and-setters-with-entity-framework-db-first-flow/" rel="bookmark">Configuring Private Constructors and Setters with Entity Framework DB First flow</a></h2></header><div class="entry-content"><p>When using the DB First workflow in Entity Framework, we can add more encapsulation than the default auto-generated entities provide &hellip; <a href="https://davecallan.com/configuring-private-constructors-and-setters-with-entity-framework-db-first-flow/" class="more-link">Continue reading <span class="screen-reader-text">Configuring Private Constructors and Setters with Entity Framework DB First flow</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/configuring-private-constructors-and-setters-with-entity-framework-db-first-flow/" rel="bookmark"><time class="entry-date published" datetime="2026-03-07T10:14:16+00:00">March 7, 2026</time><time class="updated" datetime="2026-03-07T11:32:42+00:00">March 7, 2026</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/configuring-private-constructors-and-setters-with-entity-framework-db-first-flow/#respond">Leave a comment<span class="screen-reader-text"> on Configuring Private Constructors and Setters with Entity Framework DB First flow</span></a></span></footer></article><article id="post-7853" class="post-7853 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/entity-framework-query-flow-explained-with-sequence-diagram/" rel="bookmark">Entity Framework Query Flow Explained—Step-by-Step with a Sequence Diagram</a></h2></header><div class="entry-content"><p>This sequence diagram visualizes how Entity Framework processes a query, step-by-step. The key steps are outlined below the diagram for &hellip; <a href="https://davecallan.com/entity-framework-query-flow-explained-with-sequence-diagram/" class="more-link">Continue reading <span class="screen-reader-text">Entity Framework Query Flow Explained—Step-by-Step with a Sequence Diagram</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/entity-framework-query-flow-explained-with-sequence-diagram/" rel="bookmark"><time class="entry-date published" datetime="2025-02-08T16:11:04+00:00">February 8, 2025</time><time class="updated" datetime="2025-02-08T16:12:47+00:00">February 8, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/entity-framework-query-flow-explained-with-sequence-diagram/#respond">Leave a comment<span class="screen-reader-text"> on Entity Framework Query Flow Explained—Step-by-Step with a Sequence Diagram</span></a></span></footer></article><article id="post-7729" class="post-7729 post type-post status-publish format-standard hentry category-dotnet category-performance-improvement"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/dotnet-caching-one-second-really-make-difference/" rel="bookmark">.NET Caching: Can a One Second Cache Really Make a Difference?</a></h2></header><div class="entry-content"><p>Cache invalidation is hard, but if the data allows, using low TTLs can simplify it by automatically expiring cached items &hellip; <a href="https://davecallan.com/dotnet-caching-one-second-really-make-difference/" class="more-link">Continue reading <span class="screen-reader-text">.NET Caching: Can a One Second Cache Really Make a Difference?</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/dotnet-caching-one-second-really-make-difference/" rel="bookmark"><time class="entry-date published" datetime="2025-02-01T10:38:54+00:00">February 1, 2025</time><time class="updated" datetime="2025-02-02T14:01:39+00:00">February 2, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a>, <a href="https://davecallan.com/category/performance-improvement/" rel="category tag">Performance Improvement</a></span><span class="comments-link"><a href="https://davecallan.com/dotnet-caching-one-second-really-make-difference/#comments">1 Comment<span class="screen-reader-text"> on .NET Caching: Can a One Second Cache Really Make a Difference?</span></a></span></footer></article><article id="post-7685" class="post-7685 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/implementing-hybridcache-fusioncache-v2-dotnet-9/" rel="bookmark">Implementing HybridCache with FusionCache v2 in .NET 9</a></h2></header><div class="entry-content"><p>FusionCache v2 is the very first production-ready implementation of Microsoft HybridCache, including Microsoft&#8217;s own which is currently still in preview. &hellip; <a href="https://davecallan.com/implementing-hybridcache-fusioncache-v2-dotnet-9/" class="more-link">Continue reading <span class="screen-reader-text">Implementing HybridCache with FusionCache v2 in .NET 9</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/implementing-hybridcache-fusioncache-v2-dotnet-9/" rel="bookmark"><time class="entry-date published" datetime="2025-01-28T04:23:30+00:00">January 28, 2025</time><time class="updated" datetime="2025-01-28T05:05:44+00:00">January 28, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/implementing-hybridcache-fusioncache-v2-dotnet-9/#respond">Leave a comment<span class="screen-reader-text"> on Implementing HybridCache with FusionCache v2 in .NET 9</span></a></span></footer></article><article id="post-7589" class="post-7589 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/install-scalar-dotnet-9/" rel="bookmark">How to install Scalar in .NET 9</a></h2></header><div class="entry-content"><p>I&#8217;m guessing you know what Scalar is if you&#8217;ve arrived here so let&#8217;s just look at the code to implement &hellip; <a href="https://davecallan.com/install-scalar-dotnet-9/" class="more-link">Continue reading <span class="screen-reader-text">How to install Scalar in .NET 9</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/install-scalar-dotnet-9/" rel="bookmark"><time class="entry-date published" datetime="2025-01-25T21:28:00+00:00">January 25, 2025</time><time class="updated" datetime="2025-01-25T21:33:08+00:00">January 25, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/install-scalar-dotnet-9/#respond">Leave a comment<span class="screen-reader-text"> on How to install Scalar in .NET 9</span></a></span></footer></article><article id="post-7542" class="post-7542 post type-post status-publish format-standard hentry category-visual-studio"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/visual-studio-http-file-request-variable-example/" rel="bookmark">Visual Studio .http file request variable example</a></h2></header><div class="entry-content"><p>Request variables store values from a response for use in later requests. A common example is retrieving a Bearer token &hellip; <a href="https://davecallan.com/visual-studio-http-file-request-variable-example/" class="more-link">Continue reading <span class="screen-reader-text">Visual Studio .http file request variable example</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/visual-studio-http-file-request-variable-example/" rel="bookmark"><time class="entry-date published" datetime="2025-01-23T20:16:50+00:00">January 23, 2025</time><time class="updated" datetime="2025-01-23T20:21:27+00:00">January 23, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/visual-studio/" rel="category tag">Visual Studio Blog</a></span><span class="comments-link"><a href="https://davecallan.com/visual-studio-http-file-request-variable-example/#respond">Leave a comment<span class="screen-reader-text"> on Visual Studio .http file request variable example</span></a></span></footer></article><article id="post-7518" class="post-7518 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/add-swaggerui-back-dotnet-9-web-api-project/" rel="bookmark">How to add SwaggerUI back into a .NET 9 Web API project</a></h2></header><div class="entry-content"><p>Swashbuckle.AspNetCore (including SwaggerUI) has been removed from the Web API template in .NET 9. Since the Swashbuckle project is being &hellip; <a href="https://davecallan.com/add-swaggerui-back-dotnet-9-web-api-project/" class="more-link">Continue reading <span class="screen-reader-text">How to add SwaggerUI back into a .NET 9 Web API project</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/add-swaggerui-back-dotnet-9-web-api-project/" rel="bookmark"><time class="entry-date published" datetime="2025-01-23T12:14:19+00:00">January 23, 2025</time><time class="updated" datetime="2025-01-23T12:17:11+00:00">January 23, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/add-swaggerui-back-dotnet-9-web-api-project/#comments">1 Comment<span class="screen-reader-text"> on How to add SwaggerUI back into a .NET 9 Web API project</span></a></span></footer></article><article id="post-7480" class="post-7480 post type-post status-publish format-standard hentry category-visual-studio"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/monitor-visual-studio-dev-tunnel-traffic-realtime/" rel="bookmark">Monitor Visual Studio Dev Tunnel traffic in real-time</a></h2></header><div class="entry-content"><p>Visual Studio Dev Tunnels make testing integration with third party webhooks so easy, but is there a way to inspect &hellip; <a href="https://davecallan.com/monitor-visual-studio-dev-tunnel-traffic-realtime/" class="more-link">Continue reading <span class="screen-reader-text">Monitor Visual Studio Dev Tunnel traffic in real-time</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/monitor-visual-studio-dev-tunnel-traffic-realtime/" rel="bookmark"><time class="entry-date published" datetime="2025-01-23T02:31:30+00:00">January 23, 2025</time><time class="updated" datetime="2025-01-23T03:08:10+00:00">January 23, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/visual-studio/" rel="category tag">Visual Studio Blog</a></span><span class="comments-link"><a href="https://davecallan.com/monitor-visual-studio-dev-tunnel-traffic-realtime/#respond">Leave a comment<span class="screen-reader-text"> on Monitor Visual Studio Dev Tunnel traffic in real-time</span></a></span></footer></article><article id="post-7366" class="post-7366 post type-post status-publish format-standard hentry category-visual-studio"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/getting-started-visual-studio-2022-dev-tunnels/" rel="bookmark">Getting started with Visual Studio 2022 Dev Tunnels</a></h2></header><div class="entry-content"><p>Visual Studio Dev Tunnels are available from VS 2022 v17.6 and allow us to expose and debug our localhost APIs &hellip; <a href="https://davecallan.com/getting-started-visual-studio-2022-dev-tunnels/" class="more-link">Continue reading <span class="screen-reader-text">Getting started with Visual Studio 2022 Dev Tunnels</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/getting-started-visual-studio-2022-dev-tunnels/" rel="bookmark"><time class="entry-date published" datetime="2025-01-23T01:52:21+00:00">January 23, 2025</time><time class="updated" datetime="2025-01-23T02:00:27+00:00">January 23, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/visual-studio/" rel="category tag">Visual Studio Blog</a></span><span class="comments-link"><a href="https://davecallan.com/getting-started-visual-studio-2022-dev-tunnels/#respond">Leave a comment<span class="screen-reader-text"> on Getting started with Visual Studio 2022 Dev Tunnels</span></a></span></footer></article><article id="post-7120" class="post-7120 post type-post status-publish format-standard hentry category-azure"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/handling-github-webhooks-azure-functions-testing-integration-visual-studio-dev-tunnels/" rel="bookmark">Handling GitHub Webhooks with Azure Functions and testing integration with Visual Studio Dev Tunnels</a></h2></header><div class="entry-content"><p>GitHub can send our apps a webhook message for a variety of events that may happen on a repo such &hellip; <a href="https://davecallan.com/handling-github-webhooks-azure-functions-testing-integration-visual-studio-dev-tunnels/" class="more-link">Continue reading <span class="screen-reader-text">Handling GitHub Webhooks with Azure Functions and testing integration with Visual Studio Dev Tunnels</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/handling-github-webhooks-azure-functions-testing-integration-visual-studio-dev-tunnels/" rel="bookmark"><time class="entry-date published" datetime="2025-01-21T01:10:02+00:00">January 21, 2025</time><time class="updated" datetime="2025-01-21T01:42:09+00:00">January 21, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/azure/" rel="category tag">Azure Blog</a></span><span class="comments-link"><a href="https://davecallan.com/handling-github-webhooks-azure-functions-testing-integration-visual-studio-dev-tunnels/#respond">Leave a comment<span class="screen-reader-text"> on Handling GitHub Webhooks with Azure Functions and testing integration with Visual Studio Dev Tunnels</span></a></span></footer></article><article id="post-7123" class="post-7123 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/numerical-stringcomparer-dotnet-10/" rel="bookmark">Numerical StringComparer coming in .NET 10</a></h2></header><div class="entry-content"><p>This enables comparisons of numbers based on their numerical value instead of lexicographical order. In the example below with Ordinal &hellip; <a href="https://davecallan.com/numerical-stringcomparer-dotnet-10/" class="more-link">Continue reading <span class="screen-reader-text">Numerical StringComparer coming in .NET 10</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/numerical-stringcomparer-dotnet-10/" rel="bookmark"><time class="entry-date published" datetime="2025-01-19T15:44:32+00:00">January 19, 2025</time><time class="updated" datetime="2025-01-19T15:44:35+00:00">January 19, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/numerical-stringcomparer-dotnet-10/#respond">Leave a comment<span class="screen-reader-text"> on Numerical StringComparer coming in .NET 10</span></a></span></footer></article><article id="post-7116" class="post-7116 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/aspnet-ioptions-pattern-example/" rel="bookmark">ASP.NET IOptions pattern example</a></h2></header><div class="entry-content"><p>IOptions&lt;T> gives us compile-time safety and eliminates magic strings.Simple example below : Click on the image for a larger view &hellip; <a href="https://davecallan.com/aspnet-ioptions-pattern-example/" class="more-link">Continue reading <span class="screen-reader-text">ASP.NET IOptions pattern example</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/aspnet-ioptions-pattern-example/" rel="bookmark"><time class="entry-date published" datetime="2025-01-19T00:51:31+00:00">January 19, 2025</time><time class="updated" datetime="2025-01-19T00:51:34+00:00">January 19, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/aspnet-ioptions-pattern-example/#respond">Leave a comment<span class="screen-reader-text"> on ASP.NET IOptions pattern example</span></a></span></footer></article><article id="post-7097" class="post-7097 post type-post status-publish format-standard hentry category-software-architecture category-software-development"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/rest-api-return-204-no-content-404-not-found-http-delete-request-when-item-delete-already-deleted/" rel="bookmark">In a REST API should we return 204 (No Content) or 404 (Not Found) for a HTTP DELETE request when the item to delete is already deleted?</a></h2></header><div class="entry-content"><p>I took polls on my LinkedIn and X asking about what we should do in the scenario where we have &hellip; <a href="https://davecallan.com/rest-api-return-204-no-content-404-not-found-http-delete-request-when-item-delete-already-deleted/" class="more-link">Continue reading <span class="screen-reader-text">In a REST API should we return 204 (No Content) or 404 (Not Found) for a HTTP DELETE request when the item to delete is already deleted?</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/rest-api-return-204-no-content-404-not-found-http-delete-request-when-item-delete-already-deleted/" rel="bookmark"><time class="entry-date published" datetime="2025-01-18T23:56:09+00:00">January 18, 2025</time><time class="updated" datetime="2025-01-18T23:58:32+00:00">January 18, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/software-architecture/" rel="category tag">Software Architecture</a>, <a href="https://davecallan.com/category/software-development/" rel="category tag">Software Development</a></span><span class="comments-link"><a href="https://davecallan.com/rest-api-return-204-no-content-404-not-found-http-delete-request-when-item-delete-already-deleted/#respond">Leave a comment<span class="screen-reader-text"> on In a REST API should we return 204 (No Content) or 404 (Not Found) for a HTTP DELETE request when the item to delete is already deleted?</span></a></span></footer></article><article id="post-7075" class="post-7075 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/aspnet-rate-limiting-middleware-simple-examples/" rel="bookmark">ASP.NET Rate Limiting middleware simple examples</a></h2></header><div class="entry-content"><p>Since .NET 7, ASP.NET has built-in middleware for rate limiting our API endpoints. Once we understand the different rate limiting &hellip; <a href="https://davecallan.com/aspnet-rate-limiting-middleware-simple-examples/" class="more-link">Continue reading <span class="screen-reader-text">ASP.NET Rate Limiting middleware simple examples</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/aspnet-rate-limiting-middleware-simple-examples/" rel="bookmark"><time class="entry-date published" datetime="2025-01-18T21:31:36+00:00">January 18, 2025</time><time class="updated" datetime="2025-01-18T21:42:09+00:00">January 18, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/aspnet-rate-limiting-middleware-simple-examples/#respond">Leave a comment<span class="screen-reader-text"> on ASP.NET Rate Limiting middleware simple examples</span></a></span></footer></article><article id="post-7063" class="post-7063 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/when-to-avoid-tolist-tolistasych-entity-framework/" rel="bookmark">When to avoid ToList() / ToListAsych() in Entity Framework?</a></h2></header><div class="entry-content"><p>I had two people (including the person below who blocked me for my response) tell me using ToList() was wrong &hellip; <a href="https://davecallan.com/when-to-avoid-tolist-tolistasych-entity-framework/" class="more-link">Continue reading <span class="screen-reader-text">When to avoid ToList() / ToListAsych() in Entity Framework?</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/when-to-avoid-tolist-tolistasych-entity-framework/" rel="bookmark"><time class="entry-date published" datetime="2025-01-18T21:02:39+00:00">January 18, 2025</time><time class="updated" datetime="2025-01-18T21:03:46+00:00">January 18, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/when-to-avoid-tolist-tolistasych-entity-framework/#respond">Leave a comment<span class="screen-reader-text"> on When to avoid ToList() / ToListAsych() in Entity Framework?</span></a></span></footer></article><article id="post-7052" class="post-7052 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/view-entity-framework-db-query-plans-directly-inside-visual-studio/" rel="bookmark">View Entity Framework DB query plans directly inside Visual Studio</a></h2></header><div class="entry-content"><p>This relatively new EFCore.Visualizer Visual Studio extension looks like it could be a game changer. It enables us to view &hellip; <a href="https://davecallan.com/view-entity-framework-db-query-plans-directly-inside-visual-studio/" class="more-link">Continue reading <span class="screen-reader-text">View Entity Framework DB query plans directly inside Visual Studio</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/view-entity-framework-db-query-plans-directly-inside-visual-studio/" rel="bookmark"><time class="entry-date published" datetime="2025-01-18T20:31:30+00:00">January 18, 2025</time><time class="updated" datetime="2025-01-18T20:35:57+00:00">January 18, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/view-entity-framework-db-query-plans-directly-inside-visual-studio/#respond">Leave a comment<span class="screen-reader-text"> on View Entity Framework DB query plans directly inside Visual Studio</span></a></span></footer></article><article id="post-7043" class="post-7043 post type-post status-publish format-standard hentry category-csharp"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/what-are-discriminated-unions/" rel="bookmark">What are Discriminated Unions?</a></h2></header><div class="entry-content"><p>Discriminated Unions allow us to tell the compiler that data can be ONE OF A RANGE of pre-defined types. A &hellip; <a href="https://davecallan.com/what-are-discriminated-unions/" class="more-link">Continue reading <span class="screen-reader-text">What are Discriminated Unions?</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/what-are-discriminated-unions/" rel="bookmark"><time class="entry-date published" datetime="2025-01-17T02:23:30+00:00">January 17, 2025</time><time class="updated" datetime="2025-01-17T02:25:03+00:00">January 17, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/csharp/" rel="category tag">C# Blog</a></span><span class="comments-link"><a href="https://davecallan.com/what-are-discriminated-unions/#respond">Leave a comment<span class="screen-reader-text"> on What are Discriminated Unions?</span></a></span></footer></article><article id="post-7038" class="post-7038 post type-post status-publish format-standard hentry category-csharp"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/discriminated-unions-csharp-update/" rel="bookmark">Discriminated Unions in C# design update (Jan 2025)</a></h2></header><div class="entry-content"><p>Looks like DUs might be delivered partially over multiple versions of C# starting with Union classes based on a design &hellip; <a href="https://davecallan.com/discriminated-unions-csharp-update/" class="more-link">Continue reading <span class="screen-reader-text">Discriminated Unions in C# design update (Jan 2025)</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/discriminated-unions-csharp-update/" rel="bookmark"><time class="entry-date published" datetime="2025-01-17T02:08:49+00:00">January 17, 2025</time><time class="updated" datetime="2025-01-17T02:10:31+00:00">January 17, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/csharp/" rel="category tag">C# Blog</a></span><span class="comments-link"><a href="https://davecallan.com/discriminated-unions-csharp-update/#respond">Leave a comment<span class="screen-reader-text"> on Discriminated Unions in C# design update (Jan 2025)</span></a></span></footer></article><article id="post-7033" class="post-7033 post type-post status-publish format-standard hentry category-dotnet"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/dotnet-10-support-openapi-v31/" rel="bookmark">.NET 10 will support OpenAPI v3.1</a></h2></header><div class="entry-content"><p>Safia from Microsoft posted this on BlueSky recently &#8230; This is great news but based on what she also posted &hellip; <a href="https://davecallan.com/dotnet-10-support-openapi-v31/" class="more-link">Continue reading <span class="screen-reader-text">.NET 10 will support OpenAPI v3.1</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/dotnet-10-support-openapi-v31/" rel="bookmark"><time class="entry-date published" datetime="2025-01-17T02:00:02+00:00">January 17, 2025</time><time class="updated" datetime="2025-01-17T02:00:05+00:00">January 17, 2025</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/dotnet/" rel="category tag">.NET Core Blog</a></span><span class="comments-link"><a href="https://davecallan.com/dotnet-10-support-openapi-v31/#respond">Leave a comment<span class="screen-reader-text"> on .NET 10 will support OpenAPI v3.1</span></a></span></footer></article><article id="post-7025" class="post-7025 post type-post status-publish format-standard hentry category-asp-net-mvc"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/return-problemdetails-aspnet8-iexceptionhandler-global-exception-handler/" rel="bookmark">Return ProblemDetails from ASP.NET 8 IExceptionHandler global exception handler</a></h2></header><div class="entry-content"><p>IExceptionHandler allows us to globally handle exceptions in our ASP .NET 8 UI and API based apps. Here&#8217;s an example &hellip; <a href="https://davecallan.com/return-problemdetails-aspnet8-iexceptionhandler-global-exception-handler/" class="more-link">Continue reading <span class="screen-reader-text">Return ProblemDetails from ASP.NET 8 IExceptionHandler global exception handler</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/return-problemdetails-aspnet8-iexceptionhandler-global-exception-handler/" rel="bookmark"><time class="entry-date published" datetime="2024-03-02T10:33:16+00:00">March 2, 2024</time><time class="updated" datetime="2024-03-02T10:33:20+00:00">March 2, 2024</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/asp-net-mvc/" rel="category tag">ASP.Net MVC</a></span><span class="comments-link"><a href="https://davecallan.com/return-problemdetails-aspnet8-iexceptionhandler-global-exception-handler/#respond">Leave a comment<span class="screen-reader-text"> on Return ProblemDetails from ASP.NET 8 IExceptionHandler global exception handler</span></a></span></footer></article><article id="post-6973" class="post-6973 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/default-global-configuration-dotnet-types-entity-framework/" rel="bookmark">Setting default global configuration for .NET types in Entity Framework</a></h2></header><div class="entry-content"><p>By default Entity Framework converts strings to nvarchar(MAX) in SQL Server which isn&#8217;t ideal. We can configure this mapping in &hellip; <a href="https://davecallan.com/default-global-configuration-dotnet-types-entity-framework/" class="more-link">Continue reading <span class="screen-reader-text">Setting default global configuration for .NET types in Entity Framework</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/default-global-configuration-dotnet-types-entity-framework/" rel="bookmark"><time class="entry-date published" datetime="2023-08-22T20:38:42+00:00">August 22, 2023</time><time class="updated" datetime="2023-08-22T20:50:33+00:00">August 22, 2023</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/default-global-configuration-dotnet-types-entity-framework/#respond">Leave a comment<span class="screen-reader-text"> on Setting default global configuration for .NET types in Entity Framework</span></a></span></footer></article><article id="post-6950" class="post-6950 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/make-strings-non-unicode-entity-framework-code-first/" rel="bookmark">How to make strings non-Unicode in Entity Framework Code First</a></h2></header><div class="entry-content"><p>By default Entity Framework will convert string properties to nvarchar(MAX) or nvarchar(123) where 123 is the length we have set &hellip; <a href="https://davecallan.com/make-strings-non-unicode-entity-framework-code-first/" class="more-link">Continue reading <span class="screen-reader-text">How to make strings non-Unicode in Entity Framework Code First</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/make-strings-non-unicode-entity-framework-code-first/" rel="bookmark"><time class="entry-date published" datetime="2023-08-22T17:46:42+00:00">August 22, 2023</time><time class="updated" datetime="2023-08-24T12:29:40+00:00">August 24, 2023</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/make-strings-non-unicode-entity-framework-code-first/#respond">Leave a comment<span class="screen-reader-text"> on How to make strings non-Unicode in Entity Framework Code First</span></a></span></footer></article><article id="post-6923" class="post-6923 post type-post status-publish format-standard hentry category-csharp"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/difference-between-const-readonly-csharp/" rel="bookmark">Difference between const and readonly in C#</a></h2></header><div class="entry-content"><p>The const and readonly keywords in C# are used to declare variables that cannot be changed after they are initialized. &hellip; <a href="https://davecallan.com/difference-between-const-readonly-csharp/" class="more-link">Continue reading <span class="screen-reader-text">Difference between const and readonly in C#</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/difference-between-const-readonly-csharp/" rel="bookmark"><time class="entry-date published" datetime="2023-08-22T13:42:40+00:00">August 22, 2023</time><time class="updated" datetime="2023-08-22T13:42:44+00:00">August 22, 2023</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/csharp/" rel="category tag">C# Blog</a></span><span class="comments-link"><a href="https://davecallan.com/difference-between-const-readonly-csharp/#comments">1 Comment<span class="screen-reader-text"> on Difference between const and readonly in C#</span></a></span></footer></article><article id="post-6906" class="post-6906 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/autoinclude-navigations-entity-framework/" rel="bookmark">How to auto include navigations in Entity Framework</a></h2></header><div class="entry-content"><p>Normally if we want to include certain navigation properties we have to explicitly do it on a query by query &hellip; <a href="https://davecallan.com/autoinclude-navigations-entity-framework/" class="more-link">Continue reading <span class="screen-reader-text">How to auto include navigations in Entity Framework</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/autoinclude-navigations-entity-framework/" rel="bookmark"><time class="entry-date published" datetime="2023-08-22T12:17:41+00:00">August 22, 2023</time><time class="updated" datetime="2023-08-22T12:35:29+00:00">August 22, 2023</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/autoinclude-navigations-entity-framework/#respond">Leave a comment<span class="screen-reader-text"> on How to auto include navigations in Entity Framework</span></a></span></footer></article><article id="post-6765" class="post-6765 post type-post status-publish format-standard hentry category-entity-framework"><header class="entry-header"><h2 class="entry-title"><a href="https://davecallan.com/entity-framework-database-first-quick-start/" rel="bookmark">Entity Framework DB First quick start using EF Core Power Tools</a></h2></header><div class="entry-content"><p>It&#8217;s simple enough to get started with the Entity Framework Database First approach using the command line, but it&#8217;s even &hellip; <a href="https://davecallan.com/entity-framework-database-first-quick-start/" class="more-link">Continue reading <span class="screen-reader-text">Entity Framework DB First quick start using EF Core Power Tools</span></a></p></div><footer class="entry-footer"> <span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://davecallan.com/entity-framework-database-first-quick-start/" rel="bookmark"><time class="entry-date published" datetime="2023-08-17T19:52:36+00:00">August 17, 2023</time><time class="updated" datetime="2023-08-19T09:11:28+00:00">August 19, 2023</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://davecallan.com/category/entity-framework/" rel="category tag">Entity Framework Blog</a></span><span class="comments-link"><a href="https://davecallan.com/entity-framework-database-first-quick-start/#comments">4 Comments<span class="screen-reader-text"> on Entity Framework DB First quick start using EF Core Power Tools</span></a></span></footer></article><nav class="navigation pagination" aria-label="Posts pagination"><h2 class="screen-reader-text">Posts pagination</h2><div class="nav-links"><span aria-current="page" class="page-numbers current"><span class="meta-nav screen-reader-text">Page </span>1</span> <a class="page-numbers" href="https://davecallan.com/page/2/"><span class="meta-nav screen-reader-text">Page </span>2</a> <span class="page-numbers dots">&hellip;</span> <a class="page-numbers" href="https://davecallan.com/page/19/"><span class="meta-nav screen-reader-text">Page </span>19</a> <a class="next page-numbers" href="https://davecallan.com/page/2/">Next page</a></div></nav></main></div></div><footer id="colophon" class="site-footer"><div class="site-info"> <a href="https://wordpress.org/" class="imprint"> Proudly powered by WordPress </a> | <a href="https://dotnet.microsoft.com/en-us/" target="_blank">.NET</a> | <a href="https://devblogs.microsoft.com/dotnet/" target="_blank">.NET Blog</a> | <a href="https://devblogs.microsoft.com/visualstudio/" target="_blank">Visual Studio Blog</a></div></footer></div> <noscript><style>.lazyload{display:none;}</style></noscript><script data-noptimize="1">window.lazySizesConfig=window.lazySizesConfig||{};window.lazySizesConfig.loadMode=1;</script><script async data-noptimize="1" src='https://davecallan.com/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js?ao_version=3.1.13'></script> <script defer src="https://davecallan.com/wp-content/cache/autoptimize/js/autoptimize_938da78231e6fbe9078bd82ea687adfd.js"></script></body></html>
<!-- Dynamic page generated in 2.165 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2026-05-11 22:57:21 -->

<!-- Compression = gzip -->