お二方、ご支援ありがとうございます。
Kadumel、各「製品」は複数の「カテゴリ」に属することができるため、「製品」から「カテゴリ」への参照フォームがないため、あなたのソリューションを使用できませんでした。ただし、あなたが提案したようにコントローラーの方法を変更したところ、動作するようになりました。
これがすべてを表すコードです。同様の状況にある他の人にも役立つことを願っています。コードを改善するための提案をお待ちしております。
public class Category
{
[Key]
public int CategoryId { get; set; }
[Required]
public string Name { get; set; }
public Int16? Order { get; set; }
[ForeignKey("ParentCategoryId")]
public Category ParentCategory { get; set; }
public int? ParentCategoryId { get; set; }
[ForeignKey("ParentCategory")]
[InverseProperty("ParentCategory")]
public List<Category> SubCategories { get; set; }
[ForeignKey("ProductId")]
public List<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
public string Name { get; set; }
public string Desc { get; set; }
public int Price { get; set; }
//[ForeignKey("CategoryId")]
//[InverseProperty("Products")]
//public List<Category> Categories { get; set; }
}
(ご覧のとおり、「Product」から「Category」へのリンクの後方リストをコメントアウトしました。これは、「Product」から「Category」への後方参照として使用できた可能性があります。Kdumel はこれらのリンクを使用することを提案しましたが、私は参考文献がなくてもできるのに、参考文献がたくさんあるのは「重すぎる」と思います。同意しますか?)
これはコントローラーのコードです:
[HttpGet]
public IQueryable<Category> CategoryWithProducts(int categoryId)
{
return _contextProvider.Context.Categories.Include("Products").Where(c => c.CategoryId == categoryId);
}
そして、これは簡単なコードです:
var getProducts = function (productsObservable, parentCategoryId) {
var query = EntityQuery.from("CategoryWithProducts")
.withParameters( {categoryId: parentCategoryId } )
.select("Products");
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
if (productsObservable) {
productsObservable(data.results[0].products);
}
log('Retrieved [Products] from remote data source',
data, true);
}
};
ご覧のとおり、結果は単一の「カテゴリ」であり、そこから「querySuccedded()」関数で「製品」を取得します。
これは機能しますが、機能しない別のアプローチを使用することを望んでいました.ブリーズ コントローラーを明示的に呼び出すことなく、'products' ナビゲーション プロパティ:
parentCategoryObj.entityAspect.loadNavigationProperty("products")
ただし、これにより、ナビゲーション プロパティが null であるかのように、「製品」が読み込まれませんでした。奇妙なことに、ナビゲーション プロパティに問題があるかどうかを確認するために、この行で「products」という単語を「subCategories」に変更すると、「subCategories」データが正しく読み込まれました。あるナビゲーション プロパティが別のプロパティと異なる動作をする理由がわかりませんでした (どちらもリストです)。これについて詳しく読んだところ、現在の Breeze は「多対多」の関係をサポートしていないことに気付きました。これが理由だと思います。よろしいですか?...
ありがとうございました。良い人たちが喜んで助けてくれることを知って安心しました!
エリオール