You are making so developers' life easier! While in this world, everything has a price, you are spreading valuable knowledge free. You are just awesome!
Hello Ron - Wow....Hearty Congratulations. Very happy for you. Thank you very much for taking time to share the good news. It's an honour. Good luck and all the very best with your new role.
This is height of coincidence ! ,..I was just going through few youtube videos about repository pattern ,but was not satisfied with their explanation .I was thinking in my my mind ,i wish kudvenkat could have uploaded video on same topic ...and allas! video poped up in my recommendation with uploaded time 7 minutes ago
This is by far the best explanation of the Repository pattern on the freakin' Internet to date, when I say far I mean like the distance from the MIlky Way to the end of the Universe far. Mate... great job keep it going.
Hello Marko - Thank you very much for taking time to give feedback. This means a lot. I am very glad you found the videos useful. Good luck and all the very best with everything you are doing.
It's a really amazing and simple explanation. Thanks a lot Kudvenkat. I regret taking a course at Naresh IT, Hydrabad. They wasted my time and money. Thanks again Kudvenkat.
I did seen many videos to understand the loosly couple feature of dependency injection. I found the exact loosly coupling example in this.also, i did watch your other videos in learn dotnet core section.every one is awsome. Thanks you sir for the nice videos..
The moment you call dbContext.SaveChanges() after calling Remove(employee), the employee record will get deleted from the database. But you still have a reference to the corresponding employee object. You can use that for logging etc.
Hi Venkat, Great explanation. I have one question regarding AddScoped. What will happen if I use AddSingleton instead of AddScoped? I know the difference between them but I did not understand the real time benefit of using AddScoped in this video.. What is the advantage of using AddScoped? Can you please explain? Thanks
Some people say that Repo pattern over EntityFramework is antipattern. EntityFW is already repository. Also not sure if .Save() inside of each repo method is good idea. What if you need to do few entity operations during request - then it will be few DB transactions. Probably better to have BaseRepo where you do generic retrival, update, create and save operations.
Thank you so much for all your efforts, the description is also so informative , which proves your complete dedication that too for free, Really thank you sir , following you since college , my all major minor projects are becoz of you.
Hello Shruti - Thank you very much for the feedback. Means a lot. I have included all the ASP .NET Core tutorial videos, slides and text articles in sequence on the following page. Hope you will find it handy. www.pragimtech.com/courses/asp-net-core-mvc-tutorial-for-beginners/ When you have some time, can you please leave your rating and valuable feedback on the reviews tab. It really helps us. Thank you. Good luck and all the very best with everything you are doing.
Thank you so much Venkat. You have really done well. I have a question. If we have 100+ repositories, are we suppose to list all of them in the ConfigureServices Method? That I feel might be difficult to manage. Your advice please. Thank you
Thank you so much for this amazing tutorial, For people using API, to display the result, use the following code in controller: [HttpGet] public IActionResult Get() { var employees = _employeeRep.GetAllEmployee(); return Ok(employees ); }
Nicely explained but it seems similar to video on DI. Again the same doubt how one can have reference of multiple store repository at the same time, in this case InMemory and SQL repositories and use one on the fly as per requirement?
Of course! Onion architecture explained by Mr Venkat will be very easy to understand as he knows how to bring difficult contexts simple and clear. Thanks to him for help developers.
Why would we need a repository? Can't we directly implement those CRUD methods in a service? Like EmployeeService which has a readonly private AppDbContext to work with? Why add another layer (repository)? Or am I just mistaking naming conventions and in this video Repository is a sort of Service?
I have a question, at 05:17 We are coping properties of employeeChanges to employee, but employee already equals to employeeChanges at line 51, why should we copy the properties again?
I am getting this exception, whats wrong with me? InvalidOperationException: The DbContext of type 'AppDbContext' cannot be pooled because it does not have a single public constructor accepting a single parameter of type DbContextOptions.
sorry sir,i dont think repository pattern is neccesary.We 've created the dbContext instance by depency injection,why not just use the methods of our appDBContext to access the database in the controller action method?
A lot of the topics that Venkat teaches may seem unnecessary in small projects. But he's preparing you for when you go into larger and complex projects. Having a repository class ensures you retrieve data the same way everytime, as you may require the same data from more than one business logic layer components.
If you have problems running the pogram it might be because you don't have the default page as index just put app.UseMvcWithDefaultRoute(); before app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Details}/{id=2}"); }); and it should work (version 3.1)
So not this one ( video and tutorial) is great, all your videos are, but when one tutorial with Data Access and stored procedures , for those who has already databases ,stored procedures, triggers..etc? Thanks
I am not getting error cannot open databse . I am getting the error Object reference not set to an instance of an object. @foreach (var employee in Model). Please help me on the same.
hi venkat, one question in realtime scenario will use only with one databse(SQl,Oracle,..) we don''t need to create repositories multiple, Then how this repository pattern useful.
Seperation of concerns. Back in the days when we were using ADO, we also created a data access layer that gets data from SQL and pass back to the caller which is the business logic layer. I see this repository pattern is pretty much doing the same thing.
I'm getting a red squiggley line in the following code Department = Dept.HR in the MockEmployeeRepository. Should I have some Properties in the Department Class? Thanks !
Not sure if this has already been answered or not, but if you do AddSinglton an exception will be thrown: Singleton ImplementationType: EmployeeManagement.Models.SQLEmployeeRepository': Cannot consume scoped service 'EmployeeManagement.Models.AppDbContext' from singleton 'EmployeeManagement.Models.IEmployeeRepository
Hello Sir HTTP Error 500.30 - ANCM In-Process Start Failure I got this error while running the project, how to fix this ? As I have done the same things that you have done in the project so far. Please Reply as soon as possible
You will hit an error if you use AddSingleton. This is because internally services.AddDbContext adds the context as a scoped service and you can't use a scoped service inside a singleton service. Singleton service - Instance created on first request, stays alive and shared by all users until the application shuts down. Scoped service - Instance created on first request of a web request, stays alive and used only by the same web request. So why is the dbcontext added as scoped instead of singleton? Because * We would not want to have a dbcontext service to be shared by multiple users. * If it is a singleton service, it will stay alive and keep using more and more system resources for the hundreds and thousands or even millions of database calls and will soon crash the application.
Implementation for Update method in MockEmployeeRepository, as shown here, should not work. Instead the code below should. public Employee Update(Employee employee) { int Id = employee.Id; int index = _employeeList.FindIndex(e => e.Id == employee.Id); _employeeList[index].Name = employee.Name; _employeeList[index].Email = employee.Email; _employeeList[index].Department = employee.Department; return employee; }