2013-01-15 55 views
0

這是我的用戶模型:壞導航屬性/一到零或一個關係

public User{ 
    ... (no navigation Property to modeltype) 

} 

下面的模型是從DocCode OrderDetails->產品只有的OrderDetail有一個外鍵產品的靈感。 對於這個配置,我從微風中收到錯誤消息:用戶SB和TL的「不良導航屬性」,但不是MA。

public modeltype{ 
    public DateTime? ClosedBySB { get; set; } 

    public long? SBId { get; set; } 
    [ForeignKey("SBId")] 
    public User SB { get; set; } 

    public DateTime? ClosedByTL { get; set; } 

    public long? TLId { get; set; } 
    [ForeignKey("TLId")] 
    public User TL { get; set; } 

    public DateTime? ClosedByMA { get; set; } 

    public long? MAId { get; set; } 
    [ForeignKey("MAId")] 
    public User MA { get; set; } 
    .... 
} 

,而這個工程:

public modeltype{ 
    public DateTime? ClosedBySB { get; set; } 

    //public long? SBId { get; set; } 
    //[ForeignKey("SBId")] 
    //public User SB { get; set; } 

    public DateTime? ClosedByTL { get; set; } 

    //public long? TLId { get; set; } 
    //[ForeignKey("TLId")] 
    //public User TL { get; set; } 

    public DateTime? ClosedByMA { get; set; } 

    public long? MAId { get; set; } 
    [ForeignKey("MAId")] 
    public User MA { get; set; } 
    .... 
} 

我認爲這應該工作? 沒有額外的Fluent Api配置。 感謝您的幫助。

回答

1

當模型包含2+屬性具有相同類型(1對1關係)時,我有同樣的問題。我必須深入微風與協會的邏輯來解決這個問題。看起來,微風分析它們中的每一個,並從臨時陣列中移除,如果當前關聯有兩端。否則,微風會顯示'不良的導航屬性'錯誤。如果具有相同類型的多個1對1屬性,breeze將刪除所有此1對1關係的一端(第一個屬性除外),並顯示錯誤。嘗試改變 「addToIncompleteMap」 功能這個字符串breeze.js:

incompleteTypeMap[np.entityTypeName] = assocMap; 

if (incompleteTypeMap[np.entityTypeName]) 
    (incompleteTypeMap[np.entityTypeName])[np.associationName] = np; 
else 
    incompleteTypeMap[np.entityTypeName] = assocMap; 
+0

你能告訴我repro這個錯誤嗎?如果我可以複製它,我會改變微風來源併發布修復。和thx ... –

+0

EF代碼第一個模型必須包含具有2個或更多屬性相同1對1關係類型的類。例如:'public class EntityA {int ID {get; set;} int SomeProp {get; set;} ... int EntityB_FirstID {get; set;} virtual EntityB EntityB_First {get; set;} int EntityB_SecondID {get; set ;} virtual EntityB EntityB_Second {get; set;}}',其中EntityB - 其他模型類。 –

+0

非常酷!謝謝。我改變了我的邏輯,所以我只需要一個。但我很快會再次遇到這個問題。 –

0

我懷疑EF配置問題。

當有一個導航返回相關的用戶實體時,您會成功,但當您有三個此類導航屬性時會失敗。你沒有[InverseProperty]來幫助EF找出它,因爲你不希望導航屬性從用戶回到ModelType(我可以想象爲什麼你不想要他們)。我想你將不得不使用Fluent API來告訴EF你的意思。

0

我註釋掉ForeignKey的屬性,並把這個在配置文件中爲ModelType:

HasOptional(p => p.SB) 
      .WithMany() 
      .HasForeignKey(s => s.SBId) 
      .WillCascadeOnDelete(false); 

     HasOptional(p => p.TL) 
     .WithMany() 
     .HasForeignKey(s => s.TLId) 
     .WillCascadeOnDelete(false); 

     HasOptional(p => p.MA) 
     .WithMany() 
     .HasForeignKey(s => s.MAId) 
     .WillCascadeOnDelete(false); 

但是,這會產生同樣的錯誤。 SB和TL拋出bad nav property異常。導航屬性必須爲空,所以我使用HasOptional()。 我不知道在哪裏放置任何其他配置,以便微風識別entityType(對於SB/TL而言未定義爲例外)。

1

此錯誤是固定的微風v 1.0.0。並感謝Sergey指出修復。

相關問題