1

我想從數據庫中加載一個實體,然後利用它的ICollection(從模型類)加載某些子數據。這將是非常簡單,從個人視圖模型做的,如果它是一個1對多的關係,但我有一點更復雜的結構 -當添加額外的擴展複雜類型到微風實體

父母有許多兒童。每個孩子都有很多孫子,需要與適當的孩子聯繫起來。層次結構需要保持機智。

,我拿出迄今可能不是最好的辦法中的其他選項,所以我我的問題是 - 什麼是加載了孫子的最佳實踐 - 或者一些其他的方法?

在構造函數中

在配置metadataStore -

function configureMetadataStore(metadataStore) { 
    metadataStore.registerEntityTypeCtor(
     'Child', null, childInitializer); 
} 

function childInitializer(child) { 
    child.grandchildren = (Do something here) 
     return grandchildren; 
    }); 
} 

在視圖模型,孩子們正在填充 -

function refresh() { 
    return datacontext.getChildren(childs, parentId); 
} 

var addGrandChildren = function() { 
    $.each(childs, function (i) { 
     var grandChildren = ko.observableArray(); 
     var childId = $(this).data(id); 
     datacontext.getGrandChildren(grandChildren, childId); 
    }); 
    return; 
}; 

或其他方法?

回答

1

假如您的關係是不是單向的,Breeze實體會在您查詢它們時自動掛鉤在一起。 (編輯:爲v 1.3.5 - 微風也將掛鉤單向關係以及)

這意味着,如果你使用查詢提取n個實體,只是碰巧與所有的人都將被自動鏈接以正確的方式彼此交流。如果您使用EntityQuery.expand方法,則會發生同樣的情況。所以你的問題就是如何以最少的調用次數查詢你想要的圖表的任何部分。

注意:你也應該看看EntityAspect.loadNavigationProperty方法,如果你真的想真正「走」的圖形。但是如果你正在處理大圖,這可能是非高性能的。

+0

謝謝,他們不是單向的。你介意我更新了我的問題得到一些額外的方向,或者你想爲我慶祝這個作爲答案,並專門開闢了一個新問題有關查詢? – 2013-04-24 18:54:59

+0

沒問題。具體關於查詢的新問題可能會更好。 – 2013-04-24 18:58:36

+0

感謝已經這樣做了,如果你有機會看看http://stackoverflow.com/questions/16200400/how-when-to-query-extended-entities-in-breeze – 2013-04-24 19:18:26

0

我有與Breezejs相同的問題(1.4.2)q(0.9.7) 我想添加一個實體的計算屬性。

var doctorInitializer = function (doctor) { 
    doctor.FullName = ko.computed(function() {   
     return doctor.FirstName() + " " + doctor.MiddleName() + " " + doctor.LastName() + " " + doctor.SurName();   
    }); 
}; 

var doctorName = '/breeze/polyclinic', 
doctorManager = new breeze.EntityManager(doctorName); 
var store = doctorManager.metadataStore; 
store.registerEntityTypeCtor("Doctor", null, doctorInitializer); 

我嘗試添加計算,以構造

var doctor = function() { 
    self.FullName = ko.computed({ 
    read: function() { 
     return self.FirstName + " " + self.MiddleName + " " + self.LastName + " " + self.SurName; 
    }, 
    deferEvaluation: true 
    }); 
}; 
store.registerEntityTypeCtor("Doctor", doctorInitializer); 
在這兩種情況下

淘汰賽如果我刪除了括號,但中間名和姓唯一的工作是不是必需的,而不是空字符串,我得到空

這是我的錯誤http://screencast.com/t/bP9Xnmf9Jm

+0

你或許應該打開一個新的問題 – 2013-09-28 03:22:32