Reputation: 1036
am writing an angular application using breeze js and asp.net odata controller. Breeze JS makes the first call to the server for metadata successfully but doesn't make the second call to actually get the data. What i can see in Chrome is
XHR finished loading: GET "http://localhost:31549/Odata/ClientInvestments/$metadata".
which returns
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<Schema Namespace="Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
<EntityType Name="ClientInvestment">
<Property Name="InvestmentNumber" Type="Edm.String" />
<Property Name="Initials" Type="Edm.String" />
<Property Name="InvestorFirstName" Type="Edm.String" />
<Property Name="InvestorLastName" Type="Edm.String" />
<Property Name="InvestorNumber" Type="Edm.String" />
<Property Name="BrokerCode" Type="Edm.String" />
<Property Name="UnclearedUnits" Type="Edm.Decimal" />
<Property Name="UnclearedMarketValue" Type="Edm.Decimal" />
<Property Name="BlockedUnits" Type="Edm.Decimal" />
<Property Name="BlockedMarketValue" Type="Edm.Decimal" />
<Property Name="TotalUnits" Type="Edm.Decimal" />
<Property Name="NavDate" Type="Edm.DateTime" />
<Property Name="NavCents" Type="Edm.Decimal" />
<Property Name="CurrentValue" Type="Edm.Decimal" />
<Property Name="FundName" Type="Edm.String" />
<Property Name="FundCode" Type="Edm.String" />
<Property Name="ProductName" Type="Edm.String" />
<Property Name="ProductCode" Type="Edm.String" />
<Property Name="ProductType" Type="Edm.String" />
<Property Name="EntityCode" Type="Edm.String" />
<Property Name="InvestmentType" Type="Edm.String" />
</EntityType>
<EntityType Name="ClientTransaction">
<Property Name="TransactionId" Type="Edm.Int32" />
<Property Name="BrokerCode" Type="Edm.String" />
<Property Name="InvestorNumber" Type="Edm.String" />
<Property Name="InvestmentNumber" Type="Edm.String" />
<Property Name="TransactionDate" Type="Edm.DateTime" />
<Property Name="Description" Type="Edm.String" />
<Property Name="GrossAmount" Type="Edm.Decimal" />
<Property Name="AgentFee" Type="Edm.Decimal" />
<Property Name="VatOnFees" Type="Edm.Decimal" />
<Property Name="TotalAgentFees" Type="Edm.Decimal" />
<Property Name="NetAmount" Type="Edm.Decimal" />
<Property Name="NavPrice" Type="Edm.Decimal" />
<Property Name="Units" Type="Edm.Decimal" />
<Property Name="Wauc" Type="Edm.Decimal" />
</EntityType>
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="ClientInvestments" EntityType="Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts.ClientInvestment" />
<EntitySet Name="ClientTransactions" EntityType="Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts.ClientTransaction" />
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
then nothing
my wep api is configured like so
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapODataServiceRoute("Odata", "Odata/ClientInvestments", CreateClientInvestmentEdmModel());
config.Routes.MapODataServiceRoute("OdataCommission", "Odata/Commission", CreateCommissionEdmModel());
config.Routes.MapODataServiceRoute("OdataAssetsUnderManagement", "Odata/AssetsUnderManagement", CreateAssetsUnderManagementEdmModel());
config.Routes.MapHttpRoute(
name: "Reports",
routeTemplate: "api/reports/{action}",
defaults: new { controller = "Reports" }
);
config.Routes.MapHttpRoute(
name: "SecondaryMarket",
routeTemplate: "api/secondarymarket/{action}",
defaults: new { controller = "SecondaryMarket" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.Add(new CsvMediaTypeFormatter());
config.Formatters.Add(new ExcelMediaTypeFormatter());
config.MessageHandlers.Add(new LogRequestHandler());
config.Filters.Add(new HandleErrorFilter());
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Default;
}
public static IEdmModel CreateClientInvestmentEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.Namespace = typeof(Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts.ClientInvestment).Namespace;
builder.EntitySet<Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts.ClientInvestment>(Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.ClientInvestmentsServiceConstants.ClientInvestmentsQuery);
builder.EntitySet<Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.DataContracts.ClientTransaction>(Cadiz.Services.CadizOnline.Contracts.ClientInvestmentsService.ClientInvestmentsServiceConstants.ClientTransactionsQuery);
return builder.GetEdmModel();
}
public static IEdmModel CreateCommissionEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.Namespace = typeof(Cadiz.Services.CadizOnline.Contracts.CommissionService.DataContracts.CommissionDetail).Namespace;
builder.EntitySet<Cadiz.Services.CadizOnline.Contracts.CommissionService.DataContracts.CommissionDetail>(Cadiz.Services.CadizOnline.Contracts.CommissionService.CommissionServiceConstants.CommissionDetailsQuery);
builder.EntitySet<Cadiz.Services.CadizOnline.Contracts.CommissionService.DataContracts.CommissionSummary>(Cadiz.Services.CadizOnline.Contracts.CommissionService.CommissionServiceConstants.CommissionSummaryQuery);
return builder.GetEdmModel();
}
public static IEdmModel CreateAssetsUnderManagementEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.Namespace = typeof(Cadiz.Services.CadizOnline.Contracts.AssetsUnderManagementService.DataContracts.ClientAsset).Namespace;
builder.EntitySet<Cadiz.Services.CadizOnline.Contracts.AssetsUnderManagementService.DataContracts.ClientAsset>(Cadiz.Services.CadizOnline.Contracts.AssetsUnderManagementService.AssetsUnderManagementServiceConstants.AssetsUnderManagementQuery);
return builder.GetEdmModel();
}
}
my javascript is configured like so
breeze.config.initializeAdapterInstances({
dataService: "OData"
});
var dataService = new breeze.DataService({
serviceName: '/Odata/ClientInvestments'
});
var manager = new breeze.EntityManager({ dataService: dataService });
var query = new breeze.EntityQuery('ClientInvestments');
manager.executeQuery(query).then(function(data){
var results = data;
});
my odata controller looks like
namespace Cadiz.Web.CadizOnline.Controllers.Odata.ClientInvestments
{
[Authorize]
public class ClientInvestmentsController : ODataController
{
#region Private Members
private readonly IClientInvestmentsService dataContext;
#endregion
#region Constructors
public ClientInvestmentsController(IClientInvestmentsService dataContext)
{
this.dataContext = dataContext;
}
#endregion
#region Methods
[EnableQuery(MaxOrderByNodeCount = 1)]
[ClaimsAuthorise(CadizSecurityConstants.Operations.Read, CadizSecurityConstants.Resources.Client)]
public IHttpActionResult Get()
{
var query = dataContext.ClientInvestments;
return Ok(query);
}
#endregion
#region Virtual Methods
protected override void Dispose(bool disposing)
{
if (disposing)
{
dataContext.Dispose();
}
base.Dispose(disposing);
}
#endregion
}
}
Upvotes: 2
Views: 257
Reputation:
check your cors configuration sometimes breeze will fail silently if cors is not configured correctly
Upvotes: 0
Reputation: 4342
Not sure if this makes a difference, but you can try to write the query like this:
var query = breeze.EntityQuery
.from("ClientInvestments");
manager.executeQuery(query);
or like this:
new breeze.EntityQuery()
.from("ClientInvestments")
.using(manager)
.execute();
I'm also not sure if OData
is the correct dataservice or if you should use webApiOData
instead.
Upvotes: 1
Reputation: 17052
The EntityManager executeQuery call is asynchronous and returns a promise, so you need to call it like so:
manager.executeQuery(query).then(function(data) {
var results = data.results;
}
Upvotes: 1