0

カスタム メタデータ定義を作成し、それを Breeze エンティティ マネージャーに追加することで、サーバー上のカスタム タイプに Breeze を接続することに成功しました。

ただし、JavaScript でカスタム定義されたオブジェクト (従業員) を要求して、その関係を完全に取得することはできません。

つまり、「LoginStats」というプロパティを持つ Employee というオブジェクトがあり、これはサーバー上で List タイプです。Breeze を使用してこのオブジェクトを要求すると、6 つの要素があるはずのコレクションに 1 つの要素だけが返されます。

$promise の結果は次のようになります。

data.results[0].loginStats()[0] //object
data.results[0].loginStats()[1] //undefined

奇妙なことに、.select("LoginStats") などのプロパティを個別に選択すると、配列内の 6 つの項目が完全に返されます。

簡単な呼び出しを使用して、必要なすべてのプロパティをスペルアウトせずに、このオブジェクトを取得するにはどうすればよいでしょうか? .expand() 句を使用しようとしましたが、残念ながら、これを機能させる方法で EntityFramework に接続していません。

前もって感謝します!

編集:これは、「select」ステートメントを使用した場合とオブジェクトを要求した場合のサンプルです。これらの画像は、すべてのプロパティを選択するとどうなるかを示しています。つまり、すべて正しく入力されていますが、観察可能ではありません。ええええ!

コントローラーコード:

        [HttpGet]
        public IQueryable<Employee> Get(string id)
        {
            var criterion = new Criterion<Employee, bool>(e => e.CustomerId == id);
            var loginStatisticsExtendedProperty = new FillEmployeeLoginStatistics(_UserRoleProvider, _CustomerLoginStatsViewModelRepository);
            var availableCompaniesForEmployess = new AvailableCompaniesForEmployess(_CompanyAffiliatesRepository);
            return _EmployeeRepository.Find(criterion, loginStatisticsExtendedProperty, _EmployeeDetailsExtendedProperty, availableCompaniesForEmployess);
        }
4

1 に答える 1

0

呼び出しているサーバー側コントローラーのメソッドを確認しないと、確実に判断するのは困難です。しかし、いくつかの提案があります。

最初に、コントローラー メソッドが IQueryable コレクションを返すことを確認します。これは、クライアント側のクエリを使用してリソースをさらに制限する場合にのみ必要です。通常、コレクションを返す前に .AsQueryable() 呼び出しを追加するだけで、任意のコレクションを IQueryable にすることができます。

第 2 に、"expand" 構文は、EF でサポートされた IQueryables に対してのみ機能します。ただし、オブジェクトが親と共に「シリアル化」されていれば、クライアントからオブジェクトのグラフを返すことができます。「no db」タイプのリソースの場合、これは通常、クライアントに送信するナビゲーション プロパティをサーバーで強制的に解決することを意味します。JsonResultsAdapter を追加すると、「visitNode」メソッド内でブレークポイントを設定することにより、クライアントにシリアル化されているものを実際に「デバッグ」できます。

これが不十分な場合は、コントローラー メソッドの定義を投稿してください。

于 2013-03-28T20:07:23.427 に答える