Question

I am using Breeze.WebApi2.EF6 i got a simple breeze controller and a simple query but when i execute with a select i get all the data back not just the ones that i am selecting, Could you please help me?

Breeze Controller

[BreezeController]
public class BreezeController : ApiController
{
    readonly EFContextProvider<CodeCamperDbContext> _contextProvider =
        new EFContextProvider<CodeCamperDbContext>();

    [HttpGet]
    [Route("breeze/Metadata")]
    public string GetMetadata() 
    {
        return _contextProvider.Metadata();
    }

    [HttpGet]
    [Route("breeze/GetLookups")]
    public object Lookups()
    {
        var rooms = _contextProvider.Context.Rooms;
        var tracks = _contextProvider.Context.Tracks;
        var timeSlots = _contextProvider.Context.TimeSlots;
        return new { rooms, tracks, timeSlots };
    }

    [HttpGet]
    [Route("breeze/GetSessions")]
    public IEnumerable<Session> Sessions()
    {
        var result = _contextProvider.Context.Sessions;
        return result;
    }

    [HttpGet]
    [Route("breeze/GetPersons")]
    public IEnumerable<Person> Persons()
    {
        var result = _contextProvider.Context.Persons;
        return result;
    }

    [HttpGet]
    [Route("breeze/GetSpeakers")]
    public IEnumerable<Person> Speakers()
    {
        var result = _contextProvider.Context.Persons
            .Where(p => p.SpeakerSessions.Any());
        return result;
    }
}

datacontext.js

var getSessionsPartials = function (sessionsObservable) {

    // Create breeze query
    var query = EntityQuery.from('GetSessions')
        .select('id, title, code')
        .orderBy('timeSlotId, level, speaker.firstName');

    // Execute breeze query
    return manager.executeQuery(query)
        .then(querySucceeded)
        .fail(queryFailed);

    // Handle the success callback
    function querySucceeded(data) {
        if (sessionsObservable) {
            sessionsObservable(data.results);
        }
        log('Retrieved [Sessions] from remote data source', data, true);
    }

};

I should get (id, title, code) but instead i get all the other data as well.

Was it helpful?

Solution

in stead of IEnumerable, use IQueryable...

public IQueryable<Session> Sessions()

...etc.

This enables any expression that's appended after the method call to be translated into SQL. When you expose IEnumerable the connection with the original query provider is cut.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top