2013-05-30 53 views
0

我有導航屬性的實體,例如「父」(EntityType的對象)和「兒童」(EntityType的對象數組),但是當我導出這些實體到導航屬性「Parent」和「Children」的另一個管理器爲空或空。微風導入/導出產生null或空的導航屬性

我用的是下一行:

var query = entityQuery.from('Projects'); 
var entitiesTmp = manager.executeQueryLocally(query); //entitiesTmp have navigation properties 
var exportData = manager.exportEntities(entitiesTmp); 
var mgrTmp = new breeze.EntityManager(config.remoteServiceName); 
mgrTmp.importEntities(exportData); 
var entitiesTmp1 = mgrTmp.executeQueryLocally(query); //entitiesTmp1 doesn't have navigation properties 

我與協會雙向分層類:

public abstract class HClass 
{   
    public HClass() 
    { 
     Children = new List<HClass>(); 
    } 
    [Key] 
    public int Id { get; set; } 
    public Nullable<int> ParentId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<HClass> Children { get; set; } 
    public virtual HClass Parent { get; set; } 
} 

我有其他類與繼承:

public class AClass : HClass 
{ 
    public string Observation { get; set; } 
} 

public class BClass : HClass 
{ 
    public int Number { get; set; } 
} 

的的DbContext在服務器中:

public DbSet<AClass> Projects { get; set; } 
public DbSet<BClass> OtherProjects { get; set; } 

請幫我解決這個錯誤。

注:我用清風1.3.4

回答

1

的EntityManager.exportEntities(entitiesToExport)調用僅出口形式傳入的實體,而不是那些在傳遞的實體導航屬性在我們做等字樣。在導出期間不做圖形遍歷,只導出頂級實體。否則,小的導出可能會很大程度地降低本地緩存的大部分。

有兩種方法可以完成你想要做的事情。

第一個也是最簡單的,就是簡單地導出整個entityManager緩存。即EntityManager.exportEntities(),沒有參數。

第二種方法是使用breeze元數據並自行從頂層實體向下遍歷實體圖形以構建要導出的實體列表。小心,圖表可以很快變大。

希望這會有所幫助。

+1

第三個最好的方法......雖然有些工作......會編寫一個EntityManager.getEntityGraphs(rootEntities,[navigationPathStringArray])方法,該方法返回由根和相關實體組成的實體集合由路徑(s)。一條路徑應該遵循Breeze'select'的語法。然後將其貢獻給Breeze項目。我們很樂意。 – Ward

+0

感謝您的建議,非常感謝您的幫助。 – kuskunko