1

私はここで少しトリッキーな状況に直面しています。アプリケーションがアクセスする必要がある 2 つのサービスがあります。1 つは純粋な ODATA サービスで、もう 1 つは WebAPI (Breeze コントローラーを使用) サービスです。

私のアプリケーションは AngularJS モジュールを中心に設計されており、そよ風は 2 つの異なる単一インスタンス サービスに注入されます。

angular.module('domiciliations.services').
   factory('domiciliationService', function (breeze) {

     breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
     //more initialization goes here

     //then query methods go here
}

angular.module('person.services').
   factory('personService', function (breeze) {

    breeze.config.initializeAdapterInstances({ "dataService": "OData" });

     //more initialization goes here

     //then query methods go here
}

明らかに問題は、個人サービスがインスタンス化されると、構成が上書きされたため、定住サービスが OData を使用することです。

では、この問題に取り組むための一般的なアプローチは何ですか? 構成を分離する方法はありますか? これまでのところ、クエリ メソッドが呼び出されるたびに initializeAdapterinstances メソッドを呼び出す方法しか考えられませんが、これはあまり望ましくありません。

編集

Jay の推奨に従って、私は現在 DataService を使用しています。ctor.resolve の行でエラーが発生しています。

ds.jsonResultsAdapter = ds.jsonResultsAdapter || ds.adapterInstance.jsonResultsAdapter;

ds.adapterInstance が null であるため、例外がスローされます。しかし、なぜそれがnullなのかわかりません。

これが私がやったことです:

var service = new breeze.DataService({
            serviceName: 'http://localhost:16361/api/mandates',
            adapterName: 'WebApi'
        });
var manager = new breeze.EntityManager({ dataService: service });

//this is the line causing the later exception:

manager.fetchMetadata().then(function () { ... }

私は何かをするのを忘れましたか?

4

1 に答える 1

3

良い質問!

initializeAdapterInstanceメソッドは、実際には「デフォルト」アダプターをセットアップすることを目的としています。

複数のアダプターが必要で、クエリごとに適用する必要がある場合は、DataServiceのドキュメント、特に ctor の「adapterName」プロパティを参照してください。OData 用と WebApi 用の 2 つの DataServices を使用できます。その後、 EntityQuery.usingメソッドを介して任意のクエリにいずれかを使用できます。

 var odataDataService = new DataService({
       serviceName: "Foo",
       adapterName: "OData"
 });
 var webApiDataService = new DataService({
       serviceName: "Bar",
       adapterName: "WebApi"
 });

 var query1 = EntityQuery.from(...).where(...);
 var query2 = EntityQuery.from(...).where(...);

 entityManager.executeQuery(query1.using(odataDataService)).then(...)
 entityManager.executeQuery(query2.using(webApiDataService)).then(...)
于 2013-05-24T16:54:11.737 に答える