Breeze odata และ web api ปกติ

ฉันต้องมีเอนทิตีผู้จัดการสองคนในแอปเชิงมุมโดยใช้ breese เพื่อที่ฉันจะได้รับข้อมูลจากสองบริการที่แตกต่างกัน บริการหนึ่งคือ OData API และอีกบริการหนึ่งคือ Breeze Web API มาตรฐาน (asp.net web API ที่ใช้ Breeze Controller)

บริบท OData ของฉันทำงานได้ดี แต่เมื่อฉันสร้างบริบทมาตรฐาน คุณสมบัติ uriBuilder ยังคงเป็น odata และเมื่อผู้จัดการรายนี้พยายามรับข้อมูลเมตากำลังนำค่า $metadata นำหน้าค่าที่ส่วนท้ายของ url

 breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);
            breeze.NamingConvention.camelCase.setAsDefault();

            var serviceName = common.testApiUrl;
            var metadataStore = createMetadataStore();

ไม่มีใครรู้ว่ามันเป็นไปได้ที่จะมีการตั้งค่าทั้งสองหรือไม่?


person Anthony Joanes    schedule 15.03.2016    source แหล่งที่มา


คำตอบ (1)


ฉันจัดการเพื่อให้สิ่งนี้ใช้งานได้และเคล็ดลับคือใช้ DataService เพื่อสร้างผู้จัดการเอนทิตี ซึ่งหมายความว่าวัตถุทั้งสองแยกจากกันโดยมีการกำหนดค่าของตัวเอง และคุณสามารถใช้ OData และ WebApi ร่วมกันได้

นี่คือวิธีที่ฉันทำ:

สร้างวัตถุบริการข้อมูล

var dataService = new breeze.DataService({
                serviceName: myConfig.testApiUrl,
                hasServerMetadata: true,
                adapterName: 'WebApi'
            });

สร้างอินสแตนซ์ของผู้จัดการเอนทิตีโดยใช้บริการข้อมูลนี้

 function newManager() {
                var mgr = new breeze.EntityManager({
                    dataService: dataService
                });
                return mgr;
            }

จากนั้นคุณสามารถใช้รูปแบบเดียวกันนี้ได้มากเท่าที่คุณต้องการและเพียงแค่เปลี่ยนชื่ออแด็ปเตอร์ มีการกำหนดค่าพิเศษบางอย่างแต่มีทุกสิ่งที่เป็นมาตรฐาน ดังนั้นฉันจึงไม่ได้รวมไว้ทั้งหมดที่นี่

จากนั้น ฉันสร้าง DataContext สำหรับแต่ละ EntityManager เพื่อห่อหุ้มพวกมัน และจากนั้นฉันก็สามารถแทรกบริบทที่ฉันต้องการในเวลาที่ต้องการได้

person Anthony Joanes    schedule 16.03.2016