Supercharging your Web APIs with OData and ASP.NET Core

Поділитися
Вставка
  • Опубліковано 21 лип 2024
  • OData (Open Data Protocol) is an ISO/IEC approved, OASIS standard that defines a set of best practices for building and consuming Web APIs.
    In this episode, Hassan Habib joins Jeremy to show us how we can easily add OData support to an existing Web API built with ASP.NET Core.
    [01:26] - What is OData?
    [04:38] - Demo
    [07:18] - How can you add OData to an existing Web API?
    [12:54] - How can you shape the results of a Web API call?
    [14:13] - How can you define ordering with OData?
    [15:07] - How can you include related entities?
    [16:04] - How can you enable filtering?
    OData
    www.odata.org
    ASP.NET Core OData now available
    devblogs.microsoft.com/odata/...
    OData for Visual Studio Code
    marketplace.visualstudio.com/...
    REST API Industry Debate: OData vs GraphQL vs ORDS
    www.progress.com/blogs/rest-a...
  • Наука та технологія

КОМЕНТАРІ • 278

  • @robertkamenski9248
    @robertkamenski9248 4 роки тому +66

    Nice explanation by JSON Momoa!

  • @richardholguin3481
    @richardholguin3481 5 років тому +239

    There are two types of developers, a LOT of stickers or NO stickers

    • @chadmwest
      @chadmwest 5 років тому +3

      Truer words have never been spoken.

    • @levinjay3376
      @levinjay3376 5 років тому +1

      Hahah! :)

    • @thilehoffer
      @thilehoffer 4 роки тому +1

      I have 3 stickers on my laptop.

    • @gabrielmoreyra3365
      @gabrielmoreyra3365 4 роки тому +1

      @Sharty Waffles Sure. That's why Jeremy is MVP and you're not.

    • @gabrielmoreyra3365
      @gabrielmoreyra3365 4 роки тому

      @Sharty Waffles I believe you they're experts. But I don't believe they got there by not sticking anything to their laptops.

  • @fabienl.7569
    @fabienl.7569 5 років тому +54

    Who needs GraphQL when you have OData ? Wonderful! 🙌

    • @bryanwood9965
      @bryanwood9965 4 роки тому +2

      I always love Remote Code Execution

  • @mihirp8013
    @mihirp8013 5 років тому +2

    Thanks for making OData super easy to implement with core! Can’t wait to add additional “4 Lines of Code” to all my API projects. 👍🏻

  • @userdfourdfive1788
    @userdfourdfive1788 5 років тому +16

    This is great for simple solutions where EF context is tightly coupled to API. What about solutions that have a core project with domain models, services and repositories and where every piece is resolved dynamically when the solution is running?

  • @yaynative
    @yaynative 2 місяці тому

    I love when standards are open and powerful.

  • @Night3scape
    @Night3scape 5 років тому +8

    Amazing, thanks a lot. that was amazing intro, now I need to figure out how to integrate it with ASPCore Policy Based Authorization, to control Entity extending and other OData Features..

  • @cmcki2008
    @cmcki2008 5 років тому +1

    This got to be the best video I’ve seen while working in IT. Thank you 😊

    • @HassanHabib
      @HassanHabib 5 років тому

      Thank you for watching :-)

  • @RemusTMUTHOMI
    @RemusTMUTHOMI 5 років тому +4

    Great demo 👍👏, worth every second

  • @saravanansomu8296
    @saravanansomu8296 5 місяців тому

    This is a great way to explain OData. Loved the grocery store analogy. thanks.

  • @F2H16
    @F2H16 Рік тому

    Thanks, Hassan and Jeremy for such a nice intro.

  • @BrendanKnowles
    @BrendanKnowles 5 років тому +2

    Hassan, you're a legend - this is exactly what I was looking for!

    • @HassanHabib
      @HassanHabib 5 років тому +3

      Thank you Brendan, I think the legends are the visionaries and engineers behind this technology, I'm just trying to bring their amazing work to light.

  • @balramsingh4759
    @balramsingh4759 5 років тому +3

    Very well explained, thanks

  • @xelaksal6690
    @xelaksal6690 3 роки тому

    Magic:) Thank you for this demo.

  • @rongliao9255
    @rongliao9255 4 роки тому +2

    Great tutorial! Thanks a lot!

  • @borschetsky
    @borschetsky 5 років тому +3

    Amazing!
    Thank you a lot!

  • @subhashmishra2326
    @subhashmishra2326 3 роки тому

    Nicely explained..
    Awesome..Thanks a lot!

  • @LinusBenjamin
    @LinusBenjamin 5 років тому +2

    Great stuff! Thanks a lot!

  • @stelathsyncllc1085
    @stelathsyncllc1085 5 років тому +1

    Really good stuff. Thank you.

  • @Emis333
    @Emis333 4 роки тому +1

    That's an amazing capability, good to know :)

  • @guillermoacosta8849
    @guillermoacosta8849 5 років тому

    Hi @
    Hassan Habib! Great video and explanation! Thank you! I have a question: to practice, I'm play around Chinook databases (do you know?), and "expand" don't work for me, using it like you in your video. The result json show the value items like [ ]. The relation on databases through foreing key, indexes, etc are fine. Summarizing, it does not show the values tied by navigation properties. Please, can you give me any clue that may be failing? Thanks in advance!

  • @rans0101
    @rans0101 3 роки тому

    Great, thank you Hassan!

  • @bullsinhell
    @bullsinhell 5 років тому +2

    Hassan - First of all, a really cool demo.
    Is it possible to use the above with a return type as HttpResponseMessage for my Get action (.NET Core 2.0 - Web API)?

  • @WholeNewLevel2018
    @WholeNewLevel2018 5 років тому +1

    this is simply amazing

  • @BenHayat
    @BenHayat 4 роки тому

    Two great guys.

  • @ASPCook
    @ASPCook 4 роки тому

    I've seen a company that used OData in a large size application. And I only have one advise about it:
    OData or even GraphQL are good if you can chuck your application to small size services or you will close the door of updating your project to newer technolgies forever. Then the life will be so hard! :D

  • @matiascasagrande7759
    @matiascasagrande7759 3 роки тому +1

    Is there a way to inject the OData filtering capabilities outside the Controller? Like in a Service layer perhaps?

  • @joshmccall
    @joshmccall 5 років тому +2

    Great video!

  • @jo0h4n18
    @jo0h4n18 3 роки тому

    If you're having an api which executes an specific store procedure for that specific endpoint, then you can change the output by altering the store procedure right? This can be done without having to build and release an new version of the api that now needs a new functionality to the routebuilder.

  • @hck1bloodday
    @hck1bloodday 5 років тому +7

    great lternative to the current trend of GraphQL, and i really like this approach , with graphQl you overfetch from the db nd filter on the server, this uses Entity framework to filter in the database

    • @marcel830
      @marcel830 5 років тому +1

      You misunderstood GraphQL. You can also use the Entity Framework to filter in the DB.

    • @hck1bloodday
      @hck1bloodday 5 років тому +3

      @@marcel830 sure, but you have to spicify the queries that will apply those filters, then you loose the benefict over rest

  • @satish8000518289
    @satish8000518289 5 років тому +1

    Thank you Friends. it was awesome experience. I have worked with repository patten in that case what i can do.

    • @HassanHabib
      @HassanHabib 5 років тому

      Still works, as long as your repository object returns an IEnumerable or IQueryable.

  • @EaswaranParamasivam
    @EaswaranParamasivam 3 роки тому

    It saves more time.. thanks!

  • @ingamx
    @ingamx 4 роки тому +1

    thats really good. tnx

  • @kalaiselvanra
    @kalaiselvanra 5 років тому +3

    Interesting stuff.

  • @tuhamustefa6588
    @tuhamustefa6588 3 роки тому

    WoW, it's super Amazing

  • @arunkumarparthasarathy6424
    @arunkumarparthasarathy6424 5 років тому +2

    Superb

  • @mkraft467
    @mkraft467 Рік тому

    Thanks guys amazing demo. But I have one question which I am having a hard time to figure out: is it possible to have both the existing WebAPI and the OData service leaving side by side but to access it with a different prefix like this ?
    api/Students -> WebAPI
    odata/Students -> OData
    I am using .NET 6 / AspnetCore.OData 8

  • @LogicLabyrinth
    @LogicLabyrinth 5 років тому +2

    I wonder if this implementation is paving the way for support for GraphQL, or will it always be a divergent solution? At minimum, definitely a promising addition for standard APIs.

    • @HassanHabib
      @HassanHabib 5 років тому +1

      OData actually existed before GraphQL, in fact OData is a lot more powerful than GraphQL check out the comparison here:
      www.progress.com/blogs/rest-api-industry-debate-odata-vs-graphql-vs-ords

  • @akuhndevelopers1989
    @akuhndevelopers1989 4 роки тому +1

    Supper amazing!!

  • @UniversB3
    @UniversB3 4 роки тому

    Très belle démonstration d'OData, Merci.
    J'aurai bien aimé savoir comment et surtout à quelle moment les données sont traités (filtre, select,... )
    Est ce que c'est vraiment au moment de l'exécution de la requête dans la base de données où une fois remontée, mais ça reste en mémoire côté serveur ?
    Merci beaucoup

  • @Ashwath-p8c
    @Ashwath-p8c 5 років тому +1

    Nice video! 2 questions.
    1. If I have a response like this
    {
    id:"123",
    "metadata": {
    "branch": "master"
    }
    },
    {
    id:"1234",
    "metadata": {
    "branch": "master"
    }
    },
    {
    id:"1235",
    "metadata": {
    "branch": "master1"
    }
    },
    how do I $select just the branch property?
    2. How can i select only the distinct branches? (master and master1 in this case?)

  • @abhishekbedre
    @abhishekbedre 10 місяців тому

    If you notice, the response without the $expand and $filter the API follows the camelCase and once you add the $filter or $expand it omits the default camelCase.

  • @MrKhaledpage
    @MrKhaledpage 4 роки тому

    well explained!

  • @ThoNguyen-ns6jh
    @ThoNguyen-ns6jh Рік тому

    good job, thanks

  • @mhawkpiece
    @mhawkpiece 4 роки тому +1

    Awesome!!

  • @Robinhopok
    @Robinhopok 5 років тому +3

    Really interesting. Are there any libraries which make generating Typescript clients possible? I'm also curious if OData can be used for add/update/delete operations. I guess I'll check out the docs!

    • @HassanHabib
      @HassanHabib 5 років тому +5

      Of course, we will be discussing this in detail in an upcoming videos.

    • @sugeshangovindsamy6220
      @sugeshangovindsamy6220 Рік тому

      Wow !!! So you can code and be the best football player in the world 🤣🤣🤣🤣🤣

  • @Surenzzzaaa
    @Surenzzzaaa 3 роки тому +1

    Thank You...

  • @ericjhuneespa3381
    @ericjhuneespa3381 5 років тому

    When i use odata with async task await . . using the expand .. it is not working why ??

  • @DunckingTest
    @DunckingTest Рік тому

    omg this is awsome maaaagic

  • @Turbosmurfen73
    @Turbosmurfen73 4 роки тому +1

    Love it!

  • @jacobneroth
    @jacobneroth 4 роки тому

    Out of context , how you do map open types in odata to entity framework core ?

  • @MichaelRosendahl2013
    @MichaelRosendahl2013 5 років тому +1

    Nice demo, specially if you have an open API, but is there any way to map queries to DTOs and more importantly use AuthorizationHandler?

  • @userdfourdfive1788
    @userdfourdfive1788 5 років тому +1

    Is there some possibility with the Expand feature to expand to only one level of relationship and not unlimited levels. This will prevent the user to query the whole database.

    • @idgafa
      @idgafa 4 роки тому +1

      [EnableQuery(MaxExpansionDepth = 1)]

  • @andreigalkin
    @andreigalkin 3 роки тому

    Hey. Is any one seen a recent example how to unit test a controller with ODataQueryOptions filter. I am having a trouble to create it of mock it. All example which i found do not work with the .net 5. Thanks

  • @12SecondsToLive
    @12SecondsToLive 5 років тому +1

    The end of video mention it works with Classic ASP.NET, I assume that's ASP.NET WebAPI .NET Framework? Is there an example setting that up?

    • @HassanHabib
      @HassanHabib 5 років тому

      Yup, that's exactly what I meant, in fact it's even simpler in ASP.NET Web API with .NET Framework, you still gonna have to add OData service, but then you don't have to do the dependency injection part, just add [EnableQuery] to your controller and you should be good to go!

    • @HassanHabib
      @HassanHabib 5 років тому +1

      Here's an example: ua-cam.com/video/raRCU2sbDSg/v-deo.html

  • @somebodytocode
    @somebodytocode 5 років тому +2

    impressive

  • @klfr2900
    @klfr2900 3 роки тому

    Isn´t OData also about the format, not only how to query the data? Does this also comes with the ASP.NET Core OData Package, how many lines of code would it took to add that? :)

  • @sehulugh
    @sehulugh 2 роки тому

    Wow, I got an Api to add a few lines of code and a client App to rebuild, thanks

  • @consolednd
    @consolednd 5 років тому

    For the secure reason, I don't want to share full entity from DataContext. Can I use OData for IQueryable instead of an entity?

    • @HassanHabib
      @HassanHabib 5 років тому

      Yes of course, you have full control over your return type on the controller method.

  • @JuanDavidMaya
    @JuanDavidMaya 3 роки тому

    if a want to have this automatically for every table in my database how I could achieve this without using Entity Framework and map every table manually?

  • @RaviMittal84
    @RaviMittal84 5 років тому +23

    I have a question,
    Does that Odata operations happening directly on Database OR it's happening afterwards on the result set??

    • @HassanHabib
      @HassanHabib 5 років тому +30

      If your return type is an IQueryable it runs on the database.

    • @ibrahimozgon
      @ibrahimozgon 5 років тому

      medium.com/@ibrahimozgon/asp-net-core-odata-query-database-over-url-820624beef92

    • @aah134-K
      @aah134-K 5 років тому

      @@HassanHabib ya habib
      How about if it is entity framework?

    • @HassanHabib
      @HassanHabib 5 років тому +9

      @@aah134-K if you materialize your data coming from EF as a list then it runs in memory, if you run on an IQueryable DataSet in EF then it runs on the database.

    • @odairto
      @odairto 5 років тому

      @@HassanHabib I did it and the SQL intercepted its a full SQL. This is my github, if you want to see: github.com/odairto/ODataEF

  • @acidfoxx52
    @acidfoxx52 2 роки тому

    What reference is being used that is not part of the "4 lines" of code?

  • @gleamofcolor
    @gleamofcolor 3 роки тому

    Those 4 lines of code did work in .net core 3.1 . I have to do other config changes as well. Pls update this video with latest .net core version at least 3.1 onwards

  • @elgunlee
    @elgunlee 5 років тому

    Hi. I hava a question. Is routeBuilder.EnableDependencyInjection(); required? As far as I know we can already use DI in controllers without writing this.

    • @HassanHabib
      @HassanHabib 3 роки тому

      Yes, it's required for your non-Edm route

  • @borceacristian434
    @borceacristian434 4 роки тому +1

    amazing

  • @DennisTuckersAwesome
    @DennisTuckersAwesome 4 роки тому

    Is there a git repo for this example?

  • @cyril113
    @cyril113 2 роки тому

    The funny thing is, the initial JSON response had lower case keys and the OData responses capital case keys. Pascal case is just weird.

  • @UnrealSPh
    @UnrealSPh 5 років тому

    Hi! Good video, thank you! What about restier for asp.net core?

    • @HassanHabib
      @HassanHabib 5 років тому

      Thank you for watching, we will try to address that.

  • @songlover1072
    @songlover1072 2 роки тому

    how to get the XML response with OData? because I'm having a problem retrieving it, hope anyone could help.

  • @tarakpatel85
    @tarakpatel85 4 роки тому +1

    $count is not working with endpoints.EnableDependencyInjection();, it works without and adding routeBuilder.MapODataServiceRoute("ODataRoute", "odata", GetEdmModel(app.ApplicationServices)); in .UseMvc(). Any suggestion how $count work with endpoints.EnableDependencyInjection()?

  • @DennisTuckersAwesome
    @DennisTuckersAwesome 4 роки тому

    When I download the example and run it, it brings back the student and the school when I just request students.I thought you would only get students and if you did expand=School then you would get school info? The sample code doesn't behave like the video.

  • @brunoccs
    @brunoccs 5 років тому

    Is it affecting the database query or just the return from the API?

    • @HassanHabib
      @HassanHabib 5 років тому

      If you're returning an IQueryable, it will run on the database.

  • @joelmamedov404
    @joelmamedov404 4 роки тому

    Well, if you want the client-side capability more than service end-point can provide, then, in essence, you need to write SQL type query. To do that, you need to know the data schema of the source system.
    If you are going to that direction, then I would question the whole idea of the service concept and service encapsulation.

  • @arturoescutialopez1900
    @arturoescutialopez1900 5 років тому +10

    It would be great than you could map queried data to a DTO, for me It's not quite a good idea to allow your whole entity structure be shown to clients

    • @Emis333
      @Emis333 4 роки тому +1

      You can create automappers to map your model structure to a viewmodel structure where you show just enough.

    • @mkraft467
      @mkraft467 Рік тому

      Automapper and projection is working very well with OData and EFCore

  • @SasanSalem
    @SasanSalem 5 років тому

    Do it bring all list into ram and process it in ram? Or query applied on Database? Its very important!

    • @HassanHabib
      @HassanHabib 5 років тому +2

      If you're running against an IQueryable, it will all run on the database.

    • @SasanSalem
      @SasanSalem 5 років тому +1

      @@HassanHabib that's great. thank you very much.

  • @dhanushkakodituwakku5165
    @dhanushkakodituwakku5165 5 років тому +1

    What's the best approach to make it case insensitive?

  • @DutchThought
    @DutchThought 4 роки тому +1

    When can we plug this into 3.1? Great work.

    • @offline_meetup
      @offline_meetup 4 роки тому +1

      I didn't test it yet, but here is an article from Hassan about OData in asp.net core 3.1 devblogs.microsoft.com/odata/experimenting-with-odata-in-asp-net-core-3-1/

  • @Lan0NT
    @Lan0NT 5 років тому

    Great. How to working odata with unit of work?

    • @HassanHabib
      @HassanHabib 5 років тому

      What do you mean? please elaborate.

  • @ibrahimozgon
    @ibrahimozgon 5 років тому +1

    Does OData query on DB via Entity framework or does it only query on the results?

    • @HassanHabib
      @HassanHabib 5 років тому +10

      It depends on the return type, if your controller method is returning a IEnumerable it will perform differently than if it was returning IQueryable. if it's IQueryable OData will perform the search on the database via EF, if it's IEnumerable it will perform the query on the returned results. hope this helps.

    • @ibrahimozgon
      @ibrahimozgon 5 років тому +1

      @@HassanHabib This is great answer and really great feature. Thank you for the very informative video

    • @davidpereira6982
      @davidpereira6982 5 років тому +1

      @@HassanHabib This is awesome, because I guess most of ASP.NET Core APIs return IEnumerables from the injected services in the controllers. If you only need 4 lines of code to do all of this, it's f*cking magic! I would like to know how performance is affected with OData, but so far it's quite impressive. Thank you guys, loving all your stuff you are doing and I really hope .NET Core 3 will be a boom in the Software Development world.

  • @santosh567890
    @santosh567890 5 років тому +1

    This looks interesting. I was trying to add routeBuilder to -
    app.UseWebApi() ( my app uses this). But I am not able to pass the routeBuilder predicate to this. Can someone help me out please?

    • @HassanHabib
      @HassanHabib 5 років тому

      Could elaborate more? what are you trying to do?

    • @santosh567890
      @santosh567890 5 років тому +1

      @@HassanHabib In Startup Configure(IAppBuilder) -> i am using app.UseWebApi(config) instead of UseMvc. And UseWebApi does not have routebuilder as argument. Can we somehow make this work with webapi as well?

    • @HassanHabib
      @HassanHabib 5 років тому

      @@santosh567890 I see. if you're okay with going to 6 lines of code instead of 4 - you can do this: gist.github.com/hassanhabib/a63297a55e802157b353525c9d420363

  • @y.5107
    @y.5107 5 років тому

    Why is it bad to use a field like _context in this example? Was his only point to skip the underscore/rename it and use this.context instead?

    • @HassanHabib
      @HassanHabib 5 років тому

      Use a prefix for field names doesn't follow C# naming conventions/guidelines, this was a practice that was carried over from C++, here's the coding guideline reference: docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members
      This also is a good reference:
      docs.microsoft.com/en-us/dotnet/standard/design-guidelines/general-naming-conventions

  • @KarlRhodesUK
    @KarlRhodesUK 4 роки тому

    Cool... Now how do I use consume an OData service in ASP.Net Core 3?

  • @user-mv9bn6vl9v
    @user-mv9bn6vl9v 5 років тому +1

    能不能加个中文字幕,Please add Chinese subtitles, thanks

  • @bobbyv3
    @bobbyv3 5 років тому +1

    Are those 13 or 15" Surface Book 2s?

  • @anomepani
    @anomepani 5 років тому

    Where we can find source code which you have given in Demo?

    • @HassanHabib
      @HassanHabib 5 років тому

      Right here: github.com/hassanhabib/ODataDemo

  • @baris7971
    @baris7971 5 років тому

    oData is great. But sadly it breaks Swagger API Doc. Is there any Workaround for this behaviour?

  • @ZeVS777
    @ZeVS777 5 років тому

    Interesting if I can do that with Dapper on SQL server... And also it would be great to have explanations for net core 3.0

    • @HassanHabib
      @HassanHabib 5 років тому +2

      We will make more videos around the subject and touch on net core 3.0

    • @muhammadfaridahamat8838
      @muhammadfaridahamat8838 3 роки тому

      @@HassanHabib One year on, do you have video on this subject? Can you share here if you do, I can't find anything on this.

  • @lestersantiago510
    @lestersantiago510 5 років тому

    Can certain capability be required per service? Like, api/Students needed to be filtered or paged?

    • @HassanHabib
      @HassanHabib 5 років тому

      As long as it's an API then it's OData-capable :-)

    • @lestersantiago510
      @lestersantiago510 5 років тому

      @@HassanHabib my question isn't clear. Let me try it again. If the filter has been enabled via Startup.cs, can it be required per endpoint. In the case of api/Students, filter must be supplied, else it'll throw an error. Is that possible?

    • @HassanHabib
      @HassanHabib 5 років тому

      I see what you're saying, yes you can make it per endpoint by passing a paramter through the [EnableQuery()] annotation that I used in the demo, for instance you can say: [EnableQuery(AllowedQueryOptions = Microsoft.AspNet.OData.Query.AllowedQueryOptions.Expand)] so this way you're only allowing expand but not anything else, there are more things you can do with the EnableQuery annotation to do a per-endpoint control work, does that answer your question?

    • @lestersantiago510
      @lestersantiago510 5 років тому +1

      @@HassanHabib Yes, you definitely did. Thank you. This will be really nice. This means that even though an IQueryable must be returned in order to run the query in the DB, it can prevent getting unfiltered data by requiring the endpoint to supply a filter. Cool stuff. 👍

  • @Impenneteri
    @Impenneteri 5 років тому +1

    Isn't this the same with APIs that uses RQL?

    • @HassanHabib
      @HassanHabib 5 років тому +2

      Very, very similar, Open Data Protocol has a lot of different implementations RQL seems to be one of these implementations.

  • @ashfaqshaikh7041
    @ashfaqshaikh7041 5 років тому

    Is it also available in asp.net web or mvc framework

    • @HassanHabib
      @HassanHabib 5 років тому

      Yes, here's an example: ua-cam.com/video/ZCDWUBOJ5FU/v-deo.html

  • @dotnetdevni
    @dotnetdevni 5 років тому +1

    What about auto lookup the schools against the school name

    • @HassanHabib
      @HassanHabib 5 років тому

      You can using filtering to do that, so you can do $filter=Name eq 'School Name Here' something like that.

  • @farrukhkhan967
    @farrukhkhan967 5 років тому

    How did you came out of this error
    "IServiceCollection' does not contain a definition for 'AddOData' and no accessible extension method 'AddOData' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)"
    P.S: I am using the same directive as you used. i.e.
    using Microsoft.AspNet.OData.Extensions;
    please help me.

    • @HassanHabib
      @HassanHabib 5 років тому

      Did you install the right nuget package?

    • @farrukhkhan967
      @farrukhkhan967 5 років тому +1

      @@HassanHabib I figured it out. Thanks. I was using .net core for OData and we need other nuget package i.e. .netcore package to install and then do the samething.

  • @NitishRawat
    @NitishRawat 5 років тому

    There was blank space typed in endpoint URL. Is it possible?

    • @HassanHabib
      @HassanHabib 5 років тому +3

      Yes, with OData you can totally do that :-) although an encoding might be involved in that process.

  • @emaung
    @emaung 4 роки тому +2

    Guys how can exposing the whole dbContext in controller to the world is the good idea?

    • @matiascasagrande7759
      @matiascasagrande7759 3 роки тому

      That is exactly what im asking to myself, also i just asked if there is a way to pass the filter options to an underliying layer like a Service Layer to perform the filtering in that layer and not in the controller

  • @hamedmohammadi1398
    @hamedmohammadi1398 5 років тому +1

    wow, i think MS really should focus on trending this stuff, this is like graphql but has been around since 2007, yet everybodey just talk about graphql and how its gonna change the world but it came to play in 2015

  • @AndreyMir
    @AndreyMir 5 років тому +1

    Is it similar to GraphQL?

    • @HassanHabib
      @HassanHabib 5 років тому +6

      GraphQL is similar to OData, since OData came out first in 2007.

  • @thilehoffer
    @thilehoffer 4 роки тому +1

    Does this work with .net Core 3.0?

    • @HassanHabib
      @HassanHabib 3 роки тому +1

      Yes, here's how to do it: devblogs.microsoft.com/odata/experimenting-with-odata-in-asp-net-core-3-1/ and here as well: devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/

  • @martinscheringa8765
    @martinscheringa8765 3 роки тому

    If i query schools and want to $epand all the students as a list it is not working. Can any one tell me what goes wrong?

  • @a-s733
    @a-s733 4 роки тому

    Does It does work on net core 3.0 .? if yes how..???

  • @rcardare
    @rcardare 5 років тому +2

    Needs more dynamic/non-sqlserver/large dataset examples. I had to pass on this framework as it wasn't abstract enough for a simple json response. Current framework should be filed under the EF namespace and not a standalone product.

    • @HassanHabib
      @HassanHabib 5 років тому +2

      That's not true actually, you can build a simple controller that returns a hardcoded list of values and OData will still query and filter - not EF specific.

    • @rcardare
      @rcardare 5 років тому +1

      ​I'll try it out again as I am sure things improved. Last I remember only small tables in sql were really supported, everything else killed performance or required a lot of work to implement custom EF providers in .net core. I am working on a system to abstract old databases (sql, oracle, etc) and some instances are very old and large. I had problems the last time I researched this so maybe it worth checking out again. Thanks

    • @HassanHabib
      @HassanHabib 5 років тому +1

      @@rcardare let us know how it goes.