2013-08-17 43 views
1

我根據Breeze支持的建議升級到1.4.1,但我遇到以下問題。以前,在新創建的實體上的導航屬性被定義,但是是空值的挖空觀測值。我修改了Breezejs TODO應用程序來顯示它。Breeze.js 1.4.1屬性undefined不爲空

我的數據模型之下,我的前端代碼是在這裏:

function reproduce() { 
    breeze.NamingConvention.camelCase.setAsDefault(); 
    var manager = new breeze.EntityManager(serviceName); 
    manager.fetchMetadata().then(function() { 
    var parent = manager.createEntity('Parent'); 
    console.log('otherProperty ' + parent.otherProperty()); 
    console.log('childOne ' + parent.childOne()); 
    // I cannot call parent.childrenTwo() since childrenTwois undefined 
    console.log('childrenTwo ' + parent.childrenTwo); 
    }); 
} 

的問題是,在微風的早期版本,性能otherProperty和childOne將是淘汰賽觀察到一個空值和屬性childrenTwo將是一個空的可觀察數組。 但是,正如我在控制檯中看到的那樣,所有三個屬性都是未定義的?這是故意的嗎?

我當然可以自己定義它們,但這是很多工作和我期望的微風待辦事項。另外根據Breeze文檔「很少有理由定義已經在元數據中描述的屬性。」 http://www.breezejs.com/documentation/extending-entities

更新1:

感謝周杰倫Traband,在我的再現程序,我沒有正確設置外殼。然而childrenTwo仍然沒有定義,我相信它應該是一個可觀察的數組。我的產品應用確實設置了套管,所以我不得不重新調查。

更新2:再次周杰倫Traband

謝謝,我發現,微風metastore不知道的ChildTwo類型。因此,我似乎沒有註冊它?我比Java Entity Framework更熟悉Java Hibernate。從我的數據模型中缺少一些東西?

更新3:

ChildTwo沒有一個明確的外鍵,我補充說,它的工作。我想我真的需要考慮Breeze想要一個明確的外鍵。

public class ChildTwo 
{ 
    [Key] 
    public int Id { get; set; } 

    public int ParentId { get; set; } 

    [ForeignKey("ParentId")] 
    public Parent Parent { get; set; } 
} 

數據模型。

using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
namespace Todo.Models 
{ 
    public class Parent 
    { 
    public Parent() 
    { 
     ChildrenTwo = new List<ChildTwo>(); 
    } 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string OtherProperty { get; set; } 

    [Required] 
    public ChildOne ChildOne { get; set; } 

    [Required] 
    public IList<ChildTwo> ChildrenTwo { get; set; } 
    } 
    public class ChildOne 
    { 
    [Key] 
    [ForeignKey("Parent")] 
    public int Id { get; set; } 

    public Parent Parent { get; set; } 
    } 
    public class ChildTwo 
    { 
    [Key] 
    public int Id { get; set; } 

    public Parent Parent { get; set; } 
    } 
} 
+1

這可能是一個複製粘貼錯誤,但您意識到如果這些屬性是可觀察的,您需要使用parans正確嗎?即 - console.log('otherProperty'+ parent()。otherProperty());如果你想獲取屬性,parent()。otherProperty如果你想看看它是不是未定義的? –

+0

由於這些屬性未定義,因此將它們稱爲函數會導致錯誤。日誌調用只是爲了告訴我它們是未定義的還是實際可觀察​​的。我添加了一條評論,描述爲什麼我不能()調用屬性。 –

+0

用父母()調用他們。otherProperty不應該返回錯誤...也可以考慮在之前提出的被問及的問題中標記答案,以幫助他人在未來找到答案。 –

回答

1

我只是做了一些簡單的測試,無法重現這一點。在調用createEntity之後,我在我的所有測試中看到我的實體的導航屬性作爲淘汰賽觀測值。一些想法;

你確定你是不是無意中

  • 使用備份存儲骨幹模型庫,而不是淘汰賽的。通過breeze.config.initializeAdapter
  • 將不同的外殼應用於您的屬性,即通過使用breeze.NamingConvention
+0

我的複製應用程序中的外殼屬性不正確。現在屬性otherProperty和childOne被正確定義。然而,childrenTwo仍然是未定義的,基於我的模型,我覺得它應該是一個空的可觀察數組? –

+1

使用MetadataStore.getEntityType方法可以查看Breeze認爲「父」類型的元數據屬性。我的猜測是你不會看到一個「ChildTwo」導航屬性。如果是這樣,那麼很可能您沒有爲Entity Framework正確配置您的服務器端,因爲此元數據正在從EF DbContext中檢索。 –

+0

你是對的先生! getPropertyNames()不返回ChildrenTwo。對不起,我是.NET新手(java傢伙),我在DBContext中添加了一個ChildTwo的DBSet,但它仍然不顯示?我是否錯過了上面的一些註釋? –