这是我的用户模型:
public User{
... (no navigation Property to modeltype)
}
以下型号的灵感来自DocCode OrderDetails->产品,其中只有OrderDetail具有产品的外键。 对于此配置,我收到来自breeze的错误消息:用户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配置。 谢谢你的帮助。
答案 0 :(得分:1)
当模型包含2个具有相同类型(1对1关系)的属性时,我遇到了同样的问题。我必须深入了解微风的逻辑与协会解决这个问题。如果当前关联具有两端,似乎breeze分析它们中的每一个并从temp数组中移除。否则breeze会显示“错误的导航属性”错误。如果具有相同类型的多个1对1属性,则除了第一个属性之外,breeze将删除所有这些1对1关系的一端,并显示错误。尝试在breeze.js中的“addToIncompleteMap”函数中更改此字符串:
incompleteTypeMap[np.entityTypeName] = assocMap;
到
if (incompleteTypeMap[np.entityTypeName])
(incompleteTypeMap[np.entityTypeName])[np.associationName] = np;
else
incompleteTypeMap[np.entityTypeName] = assocMap;
答案 1 :(得分:1)
从breeze v 1.0.0开始修复此错误。并感谢谢尔盖指出解决方案。
答案 2 :(得分:0)
我怀疑是EF配置问题。
如果有一个导航返回相关的用户实体,但是当您有三个此类导航属性时失败,则会成功。你没有[InverseProperty]
来帮助EF解决这个问题,因为你不希望用户的导航属性回到ModelType
(我可以想象你为什么不想要它们)。
我认为你必须使用Fluent API告诉EF你的意思。
答案 3 :(得分:0)
我注释掉了ForeignKey属性并将其放在ModelType的Config文件中:
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()
。
我不知道在哪里放置任何其他配置,因此breeze识别entityType(未定义为SB / TL,因为异常)。