0

クライアントに返したい大きなオブジェクト グラフ (モデル全体の概要) があるので、それを 1 つの大きなオブジェクトとして返すことにしました (問題のオブジェクトとして返します)。

ただし、Breeze では、各依存オブジェクトの最初のオブジェクトのみを取得しています。たとえば、2 つの「車両」オブジェクトを持つ「ポリシー」オブジェクトがあります。車両は 1 台しか表示されません (var p = data.results[0] にブレークポイントを設定しても)。呼び出しから戻ってくる json には 2 台の車両が表示されますが、そよ風は 1 台しかキャッチしていません。

他のものを取得するにはどうすればよいですか? これが私が行っている呼び出しです:

var getPolicyByPolicyNumber = function (lob, policynumber, policyObservable) {

    var params = {};
    params['lOBCd'] = lob;
    params['policyNumber'] = policynumber;

    var query = EntityQuery.from('PolicyInquiry')
        .withParameters(params);


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

    function querySucceeded(data) {
        var p = data.results[0];
        p.completeTree(true);

        return policyObservable(p);

    }

};

そして、そよ風コントローラーには次のものがあります。

[System.Web.Http.HttpGet]
public Policy PolicyInquiry(string lOBCd, string policyNumber)
{
    UserProfile userProfile = _contextProvider.Context.UserProfiles.SingleOrDefault(u => u.UserName == WebSecurity.CurrentUserName);
    var policy = Uow.PolicyServices.GetPolicy(userProfile.BrokerId, userProfile.AgencyId, "csio:" + lOBCd, policyNumber);
    return policy;
}

以下は、ポリシーと手段を示す簡略化されたモデルです。

public class Policy
{
    public int Id { get; set; }
    public string PolicyNumber { get; set; }

    [InverseProperty("Policy")]
    public ICollection<Vehicle> Vehicles { get; set; }

    // other fields removed
}

public class Vehicle
{
    public int Id {get; set}
    public string ItemId { get; set; }
    // other fields removed

    //Foreign Keys
    public int PolicyId { get; set; }
    [IgnoreDataMember]
    [ForeignKey("PolicyId")]
    [Required]
    public virtual Policy Policy { get; set; }
}
4

2 に答える 2

0

申し訳ありませんが、「ポリシー」とそのメタデータの基本的な実装を確認しないと、何が起こっているのかわかりません。しかし、私は一般的な提案をすることができます。

1) 集約オブジェクトを返し、Breeze にその構成要素を認識させたい場合、推奨されるメカニズムは、プロジェクションを作成してそれを返すことです。つまり、次のようなもの

public IQueryable<Object> CompanyInfoAndOrders() {
   return ContextProvider.Context.Customers.Select(c => new { Customer = c, Orders = c.Orders });
}

この例では、Breeze に Customer および Order タイプのメタデータがある場合、Breeze は結果を分解し、Customer とその注文を EntityManager に追加し、それぞれ「Customer」および Orders プロパティを持つ json オブジェクトのコレクションを返します。Customer と個々の Orders はそれぞれ、現在のモデル ライブラリにも "適応" されます (Angular の場合、ノックアウト、バックボーン、または backingStore など)。

于 2013-07-23T17:48:15.233 に答える