Javascript Breeze js调用元数据,但不';I don’我不会再给服务器打电话了

Javascript Breeze js调用元数据,但不';I don’我不会再给服务器打电话了,javascript,angularjs,odata,breeze,asp.net-web-api2,Javascript,Angularjs,Odata,Breeze,Asp.net Web Api2,我正在使用breeze js和asp.net odata控制器编写一个angular应用程序。Breeze JS成功地第一次调用服务器获取元数据,但没有第二次调用实际获取数据。我在Chrome中看到的是 XHR finished loading: GET "http://localhost:31549/Odata/ClientInvestments/$metadata". 返回 <?xml version="1.0" encoding="utf-8"?> <edmx:Edm

我正在使用breeze js和asp.net odata控制器编写一个angular应用程序。Breeze JS成功地第一次调用服务器获取元数据,但没有第二次调用实际获取数据。我在Chrome中看到的是

XHR finished loading: GET "http://localhost:31549/Odata/ClientInvestments/$metadata". 
返回

<?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>
我的odata控制器看起来像

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
    }
}

EntityManager executeQuery调用是异步的,返回一个承诺,因此您需要这样调用它:

manager.executeQuery(query).then(function(data) {
  var results = data.results;
}

不确定这是否有影响,但您可以尝试这样编写查询:

var query = breeze.EntityQuery
    .from("ClientInvestments"); 
manager.executeQuery(query);
new breeze.EntityQuery()  
    .from("ClientInvestments")
    .using(manager)
    .execute();
或者像这样:

var query = breeze.EntityQuery
    .from("ClientInvestments"); 
manager.executeQuery(query);
new breeze.EntityQuery()  
    .from("ClientInvestments")
    .using(manager)
    .execute();

我也不确定
OData
是否是正确的数据服务,或者您是否应该使用
webApiOData

检查您的cors配置如果cors配置不正确,breeze有时会无声地失败

好,他做了更改,但仍然是我在javascript中做的更改,我也尝试过webApiOData但是它仍然做同样的事情,我使用的是从ApiController继承的ODataController类,还有其他类我应该使用吗?
ODataController
应该可以。您是否尝试调试到executeQuery以查看Breeze内部发生了什么?