Skip to content

Instantly share code, notes, and snippets.

@xuzhg
Last active November 28, 2019 13:35
Show Gist options
  • Select an option

  • Save xuzhg/f2e9d6d1f66c4f82be1e4d4824277cd3 to your computer and use it in GitHub Desktop.

Select an option

Save xuzhg/f2e9d6d1f66c4f82be1e4d4824277cd3 to your computer and use it in GitHub Desktop.
BookStoreContext.cs
public class BookStoreContext : DbContext
{
public BookStoreContext(DbContextOptions<BookStoreContext> options)
: base(options)
{
}
public DbSet<Book> Books { get; set; }
public DbSet<Press> Presses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>().OwnsOne(c => c.Location);
}
}
@luritas

luritas commented Aug 23, 2018

Copy link
Copy Markdown

@J0rgeSerran0 thanks

@fabriziogelsi

Copy link
Copy Markdown

I'm trying to do the same example, but adding pagination. I'm having problems with this:

[HttpGet]
[EnableQuery(PageSize = 2)]
public IActionResult Get()
{
return Ok(_context.Books);
}

the result should be include the "@odata.nextLink", but I've got just the values...
The result I got is:
[
{
"id": 1,
"isbn": "978-0-321-87758-1",
"title": "Essential C#5.0",
"author": "Mark Michaelis",
"price": 59.99,
"location": {
"city": "Redmond",
"street": "156TH AVE NE"
},
"press": null
},
{
"id": 2,
"isbn": "063-6-920-02371-5",
"title": "Enterprise Games",
"author": "Michael Hugos",
"price": 49.99,
"location": {
"city": "Bellevue",
"street": "Main ST"
},
"press": null
}
]

@xuzhg

xuzhg commented Nov 27, 2019

Copy link
Copy Markdown
Author

@J0rgeSerran0 Thanks. I missed your message and can't see it until today. Updated.

@xuzhg

xuzhg commented Nov 27, 2019

Copy link
Copy Markdown
Author

@fabriziogelsi Which version are you using?

@fabriziogelsi

Copy link
Copy Markdown

NetCore 2.1 + OData-v4.0 v7.2.2

@xuzhg

xuzhg commented Nov 27, 2019

Copy link
Copy Markdown
Author

Can you try 7.0 or 7.1 to see the problem is there also?

@fabriziogelsi

fabriziogelsi commented Nov 27, 2019

Copy link
Copy Markdown

I'm still getting not information about odata.context or odata.dataLink (I want to get this information because I'm learning and trying to do a project with that data, I want to do a pagination by server-side). I've tried with 7.0 and 7.1 right now :s.

@fabriziogelsi

Copy link
Copy Markdown

Response header: (Should be "application/json; odata.metadata=minimal; odata.streaming=true"?) I got:
Content-Type application/json; charset=utf-8

@xuzhg

xuzhg commented Nov 27, 2019

Copy link
Copy Markdown
Author

@fabriziogelsi I see. Did you add more books into the Datasource? In my sample, there's only two books sample, you add "PageSize=2", the whole data source meets the page size requirement, so the server returns all data and no nextlink added.

If you change to [Pagesize=1], you will get the response:

{
    "@odata.context": "http://localhost:5001/odata/$metadata#Books",
    "value": [
        {
            "Id": 1,
            "ISBN": "978-0-321-87758-1",
            "Title": "Essential C#5.0",
            "Author": "Mark Michaelis",
            "Price": 59.99,
            "Location": {
                "City": "Redmond",
                "Street": "156TH AVE NE"
            }
        }
    ],
    "@odata.nextLink": "http://localhost:5001/odata/Books?$skip=1"
}

@fabriziogelsi

Copy link
Copy Markdown

Yes, I added 5 books. When I do the same than you, the response is:

[ { "id": 1, "isbn": "978-0-321-87758-1", "title": "Essential C#5.0", "author": "Mark Michaelis", "price": 59.99, "location": { "city": "Redmond", "street": "156TH AVE NE" }, "press": { "id": 1, "name": "Addison-Wesley", "email": null, "category": 0 } } ]

Which version NetCore are you using? And OData?. I see all the examples in internet that the response contains all the data, but I can't take the same response, Idk why :S I've just copied your example, and added the "[Enable Query(PageSize =)]" what is working, the pagination, but the other data is not retrieve.

@xuzhg

xuzhg commented Nov 27, 2019

Copy link
Copy Markdown
Author

Your payload looks a "Normal" JSON Payload, it's not OData JSON Payload. OData JSON Payload includes both control information and entity data. "@odata.context" and "@odata.nextLink" are control data, why does your data not have "@odata.context"? Do you set the metadata level as None? However, your metadata is "odata.metadata=minimal" not "odata.metadata=none". So, it's weird. Please compare your sample with my sample to see what's the difference.

I didn't change my project configuration. I cloned the sample and built/run in the Visual Studio 2019.

@fabriziogelsi

Copy link
Copy Markdown

No. My header's response is: Content-Type application/json; charset=utf-8
I was wondering if I should receive a header like this: "application/json; odata.metadata=minimal; odata.streaming=true".
I will check again, but I've just copied your sample, so I don't understand why is not working :S. I'm using VS2019 too.

@J0rgeSerran0

Copy link
Copy Markdown

Great @xuzhg :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment