login to rate this
.NET BlogEngine 4.0 [non-official]
7/28/2024 8:41:51 AM
0
0
|
login to rate this
[.NET7] Design Patterns: Facade in a Web Application
7/28/2024 8:41:52 AM
5
0
|
login to rate this
[.NET7] Design Patterns: Repository in a Web Application
1/6/2023 7:51:12 AM
0
0
|
login to rate this
[.NET7] IP GeoLocation with Dependency Injection and Custom Middleware
1/14/2023 3:15:14 PM
0
0
|
login to rate this
[.NET7] Weather Forecast with Dependency Injection and Custom Middleware
10/3/2023 10:35:11 AM
0
0
|
login to rate this
2 ways for creating QR Code using ASP.NET
12/13/2017 3:38:08 PM
0
0
|
login to rate this
AMD Ryzen 9 home server with Fedora 41 and .NET 8
11/12/2024 4:51:32 AM
15
1
|
login to rate this
ASP.NET MVC Routing with @
4/11/2017 5:33:20 PM
0
0
|
login to rate this
ASP.NET MVC Routing with Constraints
4/11/2017 5:33:21 PM
0
0
|
login to rate this
BlogEngine.NET 3.3.5 with a BBQ Sauce
4/2/2022 10:43:59 AM
0
0
|
login to rate this
BlogEngine.NET 3.3.5 with a BBQ Sauce: Part 2
7/21/2022 8:08:20 PM
0
0
|
login to rate this
EF7 on .NET Core 7 (Preview): Fedora 35 x Windows 11 (41 Million Rows)
8/3/2022 10:16:31 AM
0
0
|
login to rate this
Entity Framework Core 6: Fedora 35 x Windows 11 (41 Million Rows)
8/3/2022 10:19:30 AM
0
0
|
login to rate this
Entity Framework Core 7 (Preview): Fedora 35 x Windows 11 (41 Million Rows)
8/3/2022 10:20:01 AM
0
0
|
login to rate this
Entity Framework Providers for the .NET BlogEngine
4/2/2022 10:42:29 AM
0
0
|
login to rate this
Enum as String in EF Core
10/9/2023 2:49:39 AM
0
0
|
login to rate this
Facebook: Data Deletion Callback URL in C#
12/18/2021 5:41:17 PM
0
0
|
login to rate this
How to fix the Could not load file or assembly 'System.IO.Compression' or one of its dependencies exception
8/17/2022 3:15:48 PM
0
0
|
login to rate this
How to Recover Access to your Account in an ASP.NET Application using the Membership (without decrypting your password)
4/2/2022 10:49:35 AM
0
0
|
login to rate this
Installing and Configuring Jenkins with GIT to Build and Deploy Your .NET Application
10/3/2023 2:14:27 PM
0
0
|
login to rate this
Installing and Configuring Jenkins with SVN to Build and Deploy Your .NET Application
10/3/2023 2:15:25 PM
0
0
|
login to rate this
IP GeoLocation with Unity and Dependency Injection
12/10/2021 11:15:01 AM
0
0
|
login to rate this
NHibernate Providers for the .NET BlogEngine
4/2/2022 10:42:14 AM
0
0
|
login to rate this
No mercy for the ORMs: Load and Performance Test on EF Core, NHibernate and pure ADO.NET (41M rows)
4/9/2022 5:45:52 PM
0
0
|
login to rate this
Resizing images on a Controller Method in ASP.NET Core (.NET 6)
1/5/2022 9:36:46 AM
0
0
|
login to rate this
Streaming Video Files in ASP.NET MVC
1/18/2022 10:46:48 AM
0
0
|
login to rate this
Testing your MVC App on XSP/mono in Fedora (before deploying to Apache)
1/1/2022 10:57:29 AM
0
0
|
login to rate this
Weather with Unity and Dependency Injection
7/21/2022 8:09:56 PM
0
0
|
nbolt
Hi Folks! In this post I will show you how one of my favorite design patterns work: the repository design pattern. Before you start running the application from github, you will need to import the Repository.bacpac file into your SQL Server instance. And of course, change the connection string inside the appsettings.json file in the Repository.Site project to reflect your environment.
If you are not running an instance of the SQL Server on your machine, follow this link.
You can follow this tutorial here to import the bacpac file.
Clone the repository from github here.
What I like about this design pattern is its simplicity and how it fits right into the SOLID design pattern: we will take a look at the separation of concerns that it naturally implies. Open the NET7-DesignPattern-Repository.sln solution file and go to the Repository.Data project. Browse to an interface called IBasicRepository.
As you can see in the interface, there's CRUD (Create, Read, Update and Delete) basic methods and one special method called Query() (which is kind of cool, because we are dealing with Entity Framework here), returning an instance of the IQueryable interface, letting us configure our queries however we need, before hitting the database with the SQL command. You will also notice that there's no EFContext property to be used directly in the website. That's how things/responsabilities are separated from the UI.
Now, browse to an abstract class called _BasicRepository inside the Implementations directory of the Data library. Let's take a look at how the methods are implemented: in the constructor, there's a dependecy injection for IConfiguration (because this dependency will be used by the abstract class to instantiate the EFContext class; one of the main parts of the Data library). The EFContext uses that configuration to obtain the connection string.
The Add, Delete and Update methods are pretty straightforward: they instantiate EFContext and call their respective EF methods for database changing. The Get(string where, string order) is something I need to discuss, because LINQ does not support predicates in string form. We need to install a Nuget package called System.Linq.Dynamic.Core.
Before we run the web application, let's take a look in the Program.cs class inside the Repository.Site project. You will see the DI being registered in the IOC container on lines 7 and 8. That's how ASP.NET core knows how to translate the interface from the concrete implementations.
Browse to another class in the same project: one called HomeController. You will notice that in the constructor there's 2 dependency injections: IPersonRepository and ICarRepository. They will be used by the controller to retrieve information from the data source. You will also notice that there's 2 API controllers: _CarsController and _PeopleController (I decided to name them like that to diferentiate from the standard MVC controllers).
Now run the web application (right-click on the Repository.Site project and setup as the start up project). And have fun with it!
ps.: the UI is not perfect, I rushed it, but it works perfectly as an example. It was developed using HTML, pure Javascript and jQuery (should have used Angular though 😁).
Hope you guys enjoyed it. See ya!
nbolt
nbolt
nbolt

We use cookies and similar technologies to enhance your browsing experience, analyze site traffic, personalize content, and serve targeted advertisements. By continuing to use our site, you consent to our use of cookies. And click OK to close this pop-up window.