Breeze 导航属性错误/一对零或一关系
这是我的用户模型:Breeze 导航属性错误/一对零或一关系,breeze,Breeze,这是我的用户模型: public User{ ... (no navigation Property to modeltype) } 以下模型的灵感来自DocCode OrderDetails->Product,其中只有OrderDetail具有产品的外键。 对于此配置,我从breeze收到一条错误消息:“用户SB和TL的导航属性不好”,但MA的导航属性不好 public modeltype{ public DateTime? ClosedBySB { get; set; }
public User{
... (no navigation Property to modeltype)
}
以下模型的灵感来自DocCode OrderDetails->Product,其中只有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配置。
谢谢您的帮助。我怀疑EF配置有问题 当有一个导航返回相关用户实体时成功,但当有三个这样的导航属性时失败。您没有
[InverseProperty]
来帮助EF解决这个问题,因为您不希望从用户返回到模型类型的导航属性(我可以想象您为什么不想要它们)
我认为您必须使用Fluent API来告诉EF您的意思。我注释掉了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抛出错误导航属性
异常。导航属性必须为空,因此我使用了hasportional()
。
我不知道在哪里放置任何其他配置,以便breeze识别entityType(对于SB/TL未定义,因此例外) 当模型包含具有相同类型(1对1关系)的2+属性时,我遇到了相同的问题。我必须深入研究微风的逻辑,与协会合作来解决这个问题。似乎breeze会分析它们中的每一个,并从临时数组中删除它们,前提是当前关联具有两端。否则breeze显示“错误导航属性”错误。在多个1对1属性具有相同类型的情况下,breeze将删除所有1对1关系的一端(第一个属性除外),并显示错误。尝试在breeze.js中的“addToIncompleteMap”函数中更改此字符串:
incompleteTypeMap[np.entityTypeName] = assocMap;
到
从breeze v 1.0.0开始,此错误已修复。谢谢谢尔盖指出了解决办法 你能告诉我改正这个错误吗?如果我可以重新编程,我将更改微风源并发布修复程序。和thx…EF代码优先模型必须包含具有2个或多个属性的类,这些属性具有相同的1对1关系类型。例如:public class EntityA{int ID{get;set;}int SomeProp{get;set;}…int EntityB_FirstID{get;set;}虚拟EntityB EntityB_First{get;set;}int EntityB_SecondID{get;set;}虚拟EntityB EntityB_Second{get;set;}
,其中EntityB-其他模型类。非常酷!谢谢我改变了逻辑,所以我只需要一个。但我想不久我会再次遇到这种情况。
if (incompleteTypeMap[np.entityTypeName])
(incompleteTypeMap[np.entityTypeName])[np.associationName] = np;
else
incompleteTypeMap[np.entityTypeName] = assocMap;