Streamlining Data Transfer: Complete Guide to DTOs with AutoMapper in .NET 8 EFCore Applications.

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
he friends and everyone welcome back to  net code H Channel I am Frederick as you   know and I'm happy to have you here today I  think this is the time that I have to take it   through autoa and D I've been working with  this if you watching my videos I have been   using automapa and d2os in many projects and  there is a time for me to just break it down   for you to get a concept if you know this  already then this going to be a vision to   you isn't it but if you know then I'm  going to cover a session on autoa and D2 as you know before we Dive Right into  this make sure you have subscribed to this   Channel and also don't forget to click on that  notification Bell so you receive an update as   soon as I do upload new content you can also  like this video to support this channel grow   I do offer coaching or mentoring session to  people who are interested in net Technologies   talking about blaz Ser assembly Mar Blazer  hybrid where pii if you're interested check   this video description I have an email there  you can write to me through it okay so the   first question here is what is an auto mapper  it's very simple Auto mapper it is an object   object toob mapper that simplifies the process  of mapping complex object model to D2 and other   simpler objects so automapper can help you to  map complex object to simple object that's a   dto then the next question is what is dto d2o  what it actually stands for is data transfer   objects d2os now D2 serves as an intermediaries  in the word of software development d2o is very   crucial in terms of web or software development  then what is D on what can D2 help you do a dtoo   is an object that carries data from one part of  the system to another it acts as a container for information so you know that when you're creating  a system maybe for authentication for a product   system what you need to do here is you need  a product ID you need some password from the   user maybe if it's an authentication system you  need an ID you need a password now if you want to   show user information I believe you never show or  you will not show the password to the user isn't   it yes because the password it is hidden it not  be secret it must be kept safely and you don't   want to display to anybody so in such case you  have to create a dto to extract the properties   that you want to display out of the user this and  many more can be classified as what d2os and I'm   mapping a complex object to a simple one that is  know as using the auto mapper let's Dive Right to   this with an a practical aspect for you to get  a concept of this so I'm going to create a web   API project from here so make sure you have your  Visual Studio 2022 launched create a project in this and now this I'm going to choose  web API so I'm going to say this says net 8 so that not 8 is going to be an autoa and dets  okay so it's better that I put demo on now when   I'm done with this Source could be available  at GitHub so check this video description if   you want to grab this to be available in  there now let's get this project created so this is what we're going to do since we  are not going to um Implement database for   now this is just to teach you the concept of  automapper in dto so I don't see the need um   to actually get database connection okay but  I've made a video several videos on how to um   get your database connected and I implement or  decard in it if you having an issue with it do   let me know at the comment section and I'll put  that video out for you okay so this what you're   going to do let's say we going to have a system  and a model a domain for books in that you're   going to have book ID book title book AR the year  and on the price of the book okay so that's the   model that you're going to create so I have  a sample model here created already so let's   go to uh solution then in here let's let's  create a model for this so let's add as um   I want to put it at group it well so let's say  this is model and you know what model are our   entities that we need for database model let's  add a class for this and this is going to be book So within this book you know we're  going to have a public property and aside   from having this public property we are going  to provide the following as well the details   of the property that we need for each book  we need an ID the title The auor the year   and the price you know this already isn't  it that's fine now let's once we have this   we are going to create maybe our service  okay now this service is going to render   a list of books then we're going to create our  API endpoint to consume this service so let's   right cck click on this and now let's add maybe  a new folder as well now this is going to be Services let's add a class  to this and we call this book service so within this book service we going  to have a list of books so let's have a public and this there's going to be list  of book we can add the name or the reference so this is get books okay so within this maybe this what we can do we can first have our a book down here so we  can be calling these books anytime that we want   okay so we having this we have a public and let's  make this as private so private this return a list   of books and I we calling it as what books so  we saying is equal to um new book then we are   providing this in here we can simplify this to  make it just new you can use the new keyword and   and that is all so we need not to use all this  I think let's introduce later on so we can um   do all the now so put the video now do it yourself  okay yeah so I'm done with mine are you also done   okay so here it is asking us to add read only so  yes maybe we can make it as read only so we can   read only okay and aside from that what again  can this can be simplified so this equal to we   have this so that's a new one yes okay so there  is a list that we are creating so in here we now   making it in an array form you see then we want  to just get this books so if I call this method   get books we are retrieving the books in here  okay now this we are not going to make it read   only maybe we can add data to this okay so we have  these books all right what is the next one we want   to we can be adding so let's make this as public  then we want to add a book to this so also let's   make this as public and now this rains nothing  so this is void then you say add book so this   add book we pass in this book model and we say  this is book and in here what we are saying is books do add that we can now add this book you see so we just add a book to this  the list and maybe when you talk about delay   two we can also perform that okay but for  now let's maintain the this what we need   in here get books and maybe get book by ID  I think that would be okay so let's see we   have this also this going to return book  then we say um get book by ID then we're   going to provide the book ID in here and within  this we can say that it is returning books do find so find we passing the ID so here  is it going to get us can I convert into to okay so to a book then we can use books dots we can use first or default so do ID is equal to this  ID okay so we can um also use this okay so this is get my ID and we can also  delete it well yes we can do that okay so let's   let's delete since we have this so delete by ID  we can just make it in this form delete book by   ID so inste of the first we're going to cut all  this from here they we're going to say books do remove books do remove then in here we can pass  in this so with the remove we going to search   by the ID and now when we have it then we're  going to remove it from here let's see why we   have in this we need to return this is going  to be void so we don't need to return okay so   this is all that we have in our C within the  list that we have in here okay all right so   we have that book service ready now let's go to  uh controller and now let's create a controller   for this so we have a weather forecast already  we're going to modify this weather forecast and   I'll make it book controller so this is book  controller yes I want to modify this now we   have book controller and this is going to be an  API SL book so let's remove everything from here okay then let's create Constructor  for this c r let's passing our book service now let's inject this service cont  period we can inject this and it is ready in   here okay so the first one is we want to get  all so HTTP get and you want to get all books so get all books and then here we have a public um task and now this is we need an let's say let's  provide a list of books so list of book then   we can include the reference of the model then  we say get books so get books in here okay now   within here we want to return the service so we  can say books is equal to then the book service   that we have created do get book method okay  so within this instead of um writing it here   we can just return okay with this and we can use  this Lambda expression okay okay then we can now   call this an AR 10 so you see what you're  doing we are just simplifying this then we   going to remove this in here and now let's see  so once you have here this must be an action result so we have this action result  in here then we can pass in our list   of books and in there we are returning our  book service. getet books and here what is it saying since we are not getting this  from a database it is not tasked so we   can remove the task from here and it should  be action um results so we have get books we   can make this as null okay now let's see  get by ID so let's make it duplicate of   this and we can copy this one and on top  here we need to specify only a book so a   book in here then we can specify an ID  for this okay so once you have this ID   get book and we have to pass in the same ID  and now get book by ID we can now pass in by ID then passing this ID parameter  that is it okay then you're going to   have delete so with the delete you're  also going to have the same end point and this will be delete you see so we passing  an ID and on the same so delete book then we can have delayed book by ID okay and we  passing the ID in here and this is   not returning anything right so this is an action result so you're not returning  anything you're passing the ID to this so this says this going to not it's going to   return empty we have to open a body  for this then we have to call the service we call this service then  at the end we can return okay delete it okay then we have ADD so we have to  call same and now that's going to be   the post so instead of having delete  this is going to be post so we have book okay so add book then add book this will  be the adbook and now the payload that we are   accepting here it is book and now book so with  this book object you can now have access to add   book end point then from here we can just  pass in this then we say add it so this is   how it's going to work okay so defaultly when  you create any system default way this how it's   going to be done isn't it yes here we haven't  implemented dtos we haven't implemented Auto   to mapper this a default one let's try it but  before we do that let's register the service   in the program. Cs so we can duplicate  this then say add scop so we have book service now this is coming from the folder  names space let's run this and I'll check it out okay so the end points are ready now let's try  to get all books so try this out execute this   now let's check this out so you can see that  we have all the the details in here right from   ID 1 up to ID 10 so we have book ID book title  author year and on price that's fine let's try   to add one one data or one book so we add this  book from here try this out you want to have an   ID of 11 and let's execute this it hasn't added  so let's check this out or let's get only ID 11   book execute this yeah and I can see we have it  we can also um delete this try this out passing   11 delete it and it is deleted when we click on  get all books we must see ID one up to 10 that's   fine okay but the next question is you know when  adding data when adding books we don't want to be   typing book ID we want the book ID to be sve or  autogenerated you know it's an increment of one   one one one one isn't it so can we have a way that  we can implement this automatically so that the   user uh will not be able or has shouldn't be able  to type in an ID the only thing that the going to   provide here it is the title The Al the year  and the price is it possible yes it is that is   where the d2o comes in so D2 is a data transfer  object and it is used to communicate data from   two entities so here from our data service our  service um rppo onto a user UI okay so from you   between user and under repo or the service so  within this let's see how to implement this we   must create a class and on this class you're  going to maintain only these four properties   you're going to exclude the ID because the ID  is going to be self-generated so the user do   not need to see the ID of the book when adding he  has to see only title auor year and price so that   he can provide the values for each and we add the  ID automatically so let's see how to implement it   using this dto so we're going to create a folder  in here and now let's before we have to stop this let's create this folder now let's  name this as dto so with this dto we know   in D we have to we have a request and a  response request is to add and a response   to receive from the server okay so we're  going to create a request dto this is um request this request dto now this request GTO we  need only let's go to the book model and now here   we you're going to grab this only title answer  year and price going to exclude the ID we go to   the request then in here let's paste this okay  now when we paste this we have to make changes   so we're going to copy this we go to our book  service and now where we have this add instead   of having this book we have to S it to what  request dto let's add the name space to this so request dto and now here we say it is request  dto but if I do this check see something if I add   this it won't get added why see cannot convert  from um request GTO to books you know we have   two models here and you want to convert one to  the other why is not possible that is where the   automapper comes in so we are going to map these  two entities request d2o has about four properties   whil book has five properties so when you Auto  map it is going to fill up the properties that   it says in the request dto is going to fill up  to the the original dto that is a book dto not   the book detail the book model you see the  book model has five properties and you bear   with me that you and I created it together it  has ID title Al and Etc and now the request   D2 has only title AR year and price so when you  use autoa you're going to map this four to this   four now this is how this auto power works it's  going to check uh loop through this whole model   and I'll check does the property that it has in  it correspond with each here if it correspond   then the value that the property has is going  to assign to this so title to title author to   author year to year price to price but when  you get to ID we don't have any property in   the request2 called as an ID so it's going  to skipe that so the property that you could   not find is going to skipe it's going to set  as it's going to skipe that one okay so you   want to map the title the other the year and the  price to this book model that's the reason why   we need to use automapper here so autoa goes  with request it goes with D2 automapper goes   with d2os or d2os goes with what automapper  so this are supposed to be done now how do we   Implement autoa in this it's a package that we  can install so quickly let's go to the solution   raet dependencies and I go to management get  packages in this you're going to install autoa   from Jimmy Bogard I think so so click on  the browse top and I in here let's install autoa so we want to install this autoa  extension that's Microsoft dependency   injection by jimm Bard so this is what we  need to install Okay so if it is saying   that this package was duplicated use  automa instead okay so we can use the   original one here because everything  is part of this we can still inject   this anywhere so we let's install this 8.1  let's click this package and I'll get this installed okay so this package has been  installed if you want to verify go to   solution dependencies and now packages you  can see we have this autoa in there so once   you're done the next thing that we need to  do here is to make a some configuration we   have to register this you go to the program.  Cs file and then in here let's register this   Auto mapper so dot then we're going to have  add automapper app domain. Current domain.   getet assemblies okay it's going to get all  assemblies that we can use for the profile that   we're going to create going to get all of them  and it's going to utilize them in mapping okay   the next thing to do here is we have to create  mappa profile so let's create this it's a very   simple you so the package reg this create M  profile and off you go so let's say this is profiles and now in this folder we're going to  create profile so let's create a class and the   name here is going to be profile this profile  should supposed to be profile this should be   let's make it auto maper profile that's the  right thing to do because it has an inbuilt   class known as profile that's we're going to to  inherit from so we don't need to make it profile   again that's going to be an ambiguous so TOA  profile and this should inherit from profile   as I said this is an inbuilt class that is  has to inherit from okay aside from that we   need to create a Constructor for this and now  within this Constructor that is where we're   going to perform all the magic so first of all  we're going to create so you can see create map   and now with this map take note it has from  what the destination so it has t source and   a destination can you read from this source is  where the current contest that you want to map   now destination is which one you want to map  to so you want to map from our DTS so request dto then that is our our source and  our destination here it is what book okay so this is the book model so this what we are doing so create we  are mapping from request dto that's the the   source and then there's a destination  so maybe I can put something here for you this is source and that is destination okay so when  you come here after creating this you   go to your service in here book service now  let's create Constructor in this so c r then   let's inject imapper then we say this is MPP  control period we can create an assigned field so let's use it and this what we're going to do  we're going to extend the body okay so first of   all let's have our book model now this book model  is equal to the mappa class the mapper that we   injected dot then map and now this map take note  we have the T destination so the destination here   is what which one it is book and the source here  it is a request Det go so I just going to map this   request to this book it means the four properties  that we creating the request is going to assign   each value to the book remaining the book ID how  do you get the book ID so we can have access to   we can call this method okay to get all books  or we can even call this method so we can say   that this request D2 since this is not having  you know this request2 is not having an ID but   this book has an ID so when we are done it's going  to be kept in here and then we can say that book   dot we can have the ID is equal to books here.  count you see then Plus+ so the current count   of the book we're going to add one to it this  is done automatically so let's see why having this so This books here it is getting a method or do you have to this should it  be account method the think it shouldn't be yeah so maybe we can just make it plus one  instead so you can see we are assigned the book   automatically we get a count from the book list  then we add plus one then we have this book model   okay so after having this book model then what  we're going to do here is we are going to just   add so we say that books. add then we can now  pass in this book peacefully it is very simple   isn't it so now you know how to use um uh request  dto and how to also map it in here okay let's go   to how do you get the book so that's to add let's  try this out and see first so we're going to run   this oh we have an issue here so we need to  change this this is not this is request dto   so this is a request dto and um it must book so  I want to change this to also request dto that we   have to pass in this request in here so let's  save this and now let's run this and check it out all right so let's check it  out from this book list so from   an end point in here we are going to add  then if I click on a we have only title   a year and I'm price let's click on try  this out we're going to add new one so   we're going to say this is new book and  from the we're going to say this is net code then let's maintain the year as 2001 so let's try this out hit on the execute and  now let's see if this is going to be added or not   so we have added right now that's going to be  let's see that's going to be ID what let's have   a look so let's click on get all out and check  it out do we have it yes we have ID 11 and if   you see the ID is automatically Ally generated so  you can see now we've implemented the dto and the   auto mapper by next question is if I pass in here  check it out if I pass in get ID pass in 11 check   it out so from this 11 I still have the ID if you  want to skip this ID what can you do this is very   simple you have to go to leten now we have when  here we have our request dto so we can have our   response dto isn't it so let's create our response  dto in here and in that response dto this is what   you want to do you want to combine the title  and maybe the okay you want to remove the ID   then you want to display the title and also or  maybe the the title and on the year okay so you   want to combine these two okay so I'm going to  copy this we don't need the ID let's grab this   then we have to go to our dto and this going to  be a response dto so let's create a class for this   before that let's stop this and our response is  uh respond from the service to a user so that's   a response dto let's create a class and this will  be response respon dto now this response dto this   what you want to do we want to have the title  okay the title The at the year and the price   so from this we are not going to you see this one  we are not going to display the year you want to   display the year against the title okay so we're  going to remove this from here you can clear all this okay can make this as from this end so the title and yeah that's what  we're going to do so we can add title and title and year so you going  to display the title and so the   year here so after doing this what is the  first thing to do or the next thing to do   is you go to your profile then you're  going to now create so let's copy this   so here you know that we're going to  create so it's going to be from your book your book to what that is your response response D so here we have from and  on to so from books we are mapping to what   that's a response dto that is the source  and that's the destination okay good so   once you have this created the let's to do  here is let's go to our service and where   we are getting this book list we are going  to remove all this or let's maintain it and   I'll perform it in the get by ID so with  this we we are going to put it in a code block so we can just grab this let's say this  is the book that we are looking up for so we've   searched for this the book is here now when we  are done we need to um create this book isn't   it so let's convert it let's map it so this  ISS map book is equal to then map do map now   this map it is destination here it is what  destination is what response dto and there   is a source so we are mapping from this book to  this map book now when you check this response   dto we have title in the year out and price  we're going to have properties against the   out and price title and year are not going to  be assigned why let's first have a look then   I explain the reason why that is happening  so when we are done we can then return map book but you see you have an ER here we cannot  convert that so what you need to do here is this   must be a response dto because the state that is  here is a respon d so it's my sync with the name   now let's go to the end point and let will do  same so from get by ID instead of having get by   ID where is it get by ID yes instead of having  this is supposed to be even a list or is it a list look at this so we have this get by ID and  now this is not even a list this is just a book   you see this I believe you've done it right you  created this and that's great so this is just a   list but here we need to change to request  or response dto because it is returning a   response dto now let's save this let's run  this and I'll check it out you're going to   have two properties been assigned but the  title and the year is going to be left out let's go in there and now get a book by  ID so we didn't one to 10 or 1 to 10 we can   pass in any let's passing Eight and check it out  try this execute this and you can see title and   year it is null author we have the author we  have the price isn't it let's pass in ID one then the same thing why do you have any idea yes  the question is is it the question the answer the   answer is title and year it is not found so when  it is map out when the profile is been profiling   and when it is checking up mapping through the  model or the model properties in the book do you   have any title and a year together no we don't so  it's going to map it directly to what it has in   here so this is an exceptional one so we have  to configure an exceptions okay so how do you   configure an exceptions it's very simple let's go  to the book service in here now the book service   check it out here we go to the profile and now  where we are creating the this we're going to Mar   from The Source from the model to the GTO right  so with this we need to specify the exceptions   now this exception is you want to add the title  and now the the year together okay so this is   what you want to do from this angle we going to  you can configure this by using a simple line of   code to handle this what are we doing here when  you check this we are saying that for member so   what is me talking about that is a the destination  okay this is a source and that's the destination   for for Destination that's why we call this DST  stands for Destination we want to get the property   known as title and on year get that property from  it and map from so we are mapping we are doing an   explicit mapping map form now we have this Source  The Source has this property is title and a year   so combine them and I'll assign to destination  destinations title and year property so when   you have two or more you can just configure this  with that format because it is very simple right   so the first thing I need to do here is to specify  the property that you want to assign or you want   to work on within your destination aside from  that specify an option and that's going to be   the The Source now the source here assign the  current or the required property that you want   to assign to the destinations property then have  to work on that very simple one okay so now this   is ready let's go to the book service and now  from this book service we go to get books or   even get by ID okay so this get by ID it's going  to pick this automatically since we are using a   request the in here and we've created a profile  for this so let's save this and now let's see   if we can rerun this and I'll check it out okay  so get by ID try this out let's pass in one and   I we still have the title and the year as what  now okay so let's maybe we need to um do small   settings in here to get it completed all right so  the small settings that we need to do here is to   restart the application since we have um created  a profile we've worked on the profile and this   profile need to be configured in the program.cs  that the stup file so we need to uh reload this   application so click on this to reload the project  and now let's say it's going to work automatically   for since we have a responded to being used in  here all right so let's check it out it's open   now let's passing try this out passing the ID  of five and now let's execute this and you must   have it so you can see we have shots and have web  and it's 1952 so you can see we have title author   and then price let's pass another one I'm going  to pass in 10 execute this and we have the same   thing 1990 so this working isn't it yeah so one  last thing that I'm going to show you guys here   it is also the reverse map what are this map  do let's see you know when you check our dto   we created two um dto request and our response  let's assume request is in the different name Al   together maybe it's a general dto and with this we  have the title The the year and the price if you   want to get all details excluding the ID it means  you want to have the same properties as this then   we can just make it as reverse type so let's  see from here you go to your profile your mppa   profile where is it and now here you know here we  are converting from the source to destination so   this is a source in here you're converting from  dto to um what book book model now if you want   to convert from book model to dto with the same  format then it's better that you do dot reverse   so reverse map so this going to turn this upside  down you're going to put this here and now put   this here so it's going to exchange the location  the position of these models okay now how do you   do this let's go to the book service and now where  we have this list okay we want to return request detail so dto you want to request  all not you want to request you want   to return request dto so it means  you have to clear this off now in   here what can you do we're going  to use an OP mapper to map it in here so what you going to do here is  you're going to have map book this   is books right so this equal to we're  going to use the mapper do map now this   this map you're going to provide a list  first okay so let's provide this list of we need a list of is it this books  or request we need request dto okay   because that's what you're mapping  up to so map what list of request   this is going to be the destination  and now where is going to be the source books so this books are going to be the source  okay you can just call this book directly   or you can call this uh um um get we even  have this so we can we have to call these   books and in these books here it is a list  of books that we have in here and the model   here is what book but here since we created  an an a reverse map it me going to map turn   upside down from the source to destination  and this time the source going to be the   entity is Stu Des going to be the dto so  with this what can we do we can return map books so let's return map books and now let's  grab this we go to the controller from here   where we have all books inste of this we going  to change to request Ito although it shouldn't   it shouldn't have been request here it should  be a different name because request here is   what sending to database or sending to the  the service but you are rather retrieving it   so should have been request response or maybe  General one okay this is just for a purpose   test for you to get the concept okay now that  is all this very simple so now let's run this   application and I'll check this this one out so  you can see that you're going to have all list   excluding the IDS because we using this request  that we created and the request model has no ID inclusive okay so let's try this out from the book  all books click on this try this out execute now   let's see oh yeah that's fine so you can see  we do not have IDs we have the title the AR   and IDs out yes they are out and when you check  the profile we did nothing different all that   we did was to do what yes to add reverse map  and it's going to reverse this so it's going   to change the position of this this is going  to be source and is going to be destination   okay and that is all so if you have a method or  a model that or D that you want to maintain the   state um for both our request and our response  then it's better that you give it a unique name   a generalized name so that you can using it both  in a request and a response not like what I've   done what I've done is a bad example okay you  cannot use request dto as a response dto no it   doesn't make this clear but I want to show you  something here that's why I use that okay so   do not follow this step it's very bad all right  so I think this video has actually helped you a   lot to understand autoa how to configure it how  to create dto and how to work with it you know   automap goes with dto so anytime that it comes  to your mind to create your automap to create   G don't forget to add automapper you can also  create a generic one okay so maybe when I have   time I'm going to have a video done on how to  create an autoa generic one if you don't want   to use this package and you want to customize  your own then you can also do that I'll look   away and I'll try to have a simp video for  that all right so that's the end for this   video thank you so much for watching and I'm going  to catch up in the next video till then take care
Info
Channel: Netcode-Hub
Views: 795
Rating: undefined out of 5
Keywords: web assembly, .net 8, .NET 8, API, Develop, Blazor, WebAssembly, implementation, controller, .net blazor, nugget package, create package, install package, download, clipboard, clipboard in blazor, copy in blazor, read clipboard in blazor, validation, form validation, clean arhitecture, presentation, domain, application, MediatR, CQRS, CRUD, Handler, Query, relationship, default, convention, navigation property, fluent api, efcore, onmodelcreating, automapper, DTOs, automapper with dtos
Id: jcmOb-X07xo
Channel Id: undefined
Length: 50min 5sec (3005 seconds)
Published: Wed Feb 21 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.