Search code examples
angularjsasp.net-web-apibreezehottowelbreeze-sharp

Any obvious reason why my breeze entity child nodes won't expand?


I can't figure out why my child nodes are either null or have a count of 0, even though there's associated data in the db.

Parent Class "Project"

public partial class Project
{
    public Project()

    public int Id { get; set; }
    public string Name { get; set; }
    public int ProjectOwnerId { get; set; }
    public int CurrentMilestoneId { get; set; }
    public int StatusId { get; set; }

    public virtual Milestone CurrentMilestone { get; set; }
    public virtual ProjectStatus Status { get; set; }
    public virtual ICollection<ProjectContact> Contacts { get; set; }
    public virtual ProjectAddress Address { get; set; }
}

Child node property "CurrentMilestone" comes back null

public partial class Milestone
{

    public int Id { get; set; }
    public int MasterMilestoneId { get; set; }
    public string Name { get; set; }

    public virtual MasterMilestone MasterMilestone { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}

Child node property "Contacts" comes back with an array of 0, even though there's valid matching data.

public partial class ProjectContact
{
    public int Id { get; set; }
    public int ProjectId { get; set; }
    public int PersonId { get; set; }
    public string Title { get; set; }

    public virtual Person Person { get; set; }
    public virtual Project Project { get; set; }
}

Using the HotTowel angular/breeze I'm running this..

return EntityQuery.from("Projects")
        .orderBy(orderBy)
        .expand("currentMilestone.masterMilestone, projectOwnerCompany, contacts, address")
        .using(self.manager).execute()
        .then(querySucceeded, self._queryFailed);

function querySucceeded(data) {
    projects = data.results;
    return projects;
}

Controller:

[HttpGet]
public IQueryable<Project> Projects()
{
    return _contextProvider.QueryAllReadOnly<Project>();
}

What's weird is some of them work, like Status works but leaseStatus doesn't (not shown, setup the same way) without expanding it.

Just to add more info, if I run this against the API, ..../Projects?$expand=Status%2CCurrentMilestone%2CLeaseStatus%2CCurrentMilestone%2FMasterMilestone%2CContacts%2CContacts%2FPerson&

In Fiddler the child nodes aren't expanded.


Solution

  • Figured it out..

    Change the Controller from ReadOnly to non-readonly.

    From

    [HttpGet]
    public IQueryable<Project> Projects()
    {
        return _contextProvider.QueryAllReadOnly<Project>();
    }
    

    To

    [HttpGet]
    public IQueryable<Project> Projects()
    {
        return _contextProvider.QueryAll<Project>();
    }