0

这是我的用户模型:

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

}

以下模型的灵感来自 DocCode OrderDetails->Product,其中只有 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 配置。谢谢你的帮助。

4

4 回答 4

1

当模型包含具有相同类型(1 对 1 关系)的 2 个以上属性时,我遇到了同样的问题。为了解决这个问题,我必须深入研究与协会合作的微风逻辑。如果当前关联具有两端,则微风似乎会分析它们中的每一个并从临时数组中删除。否则,微风会显示“不良导航属性”错误。如果有多个具有相同类型的 1 对 1 属性,微风会删除所有这些 1 对 1 关系的一端,但第一个属性除外,并显示错误。尝试在微风.js 中的“addToIncompleteMap”函数中更改此字符串:

  incompleteTypeMap[np.entityTypeName] = assocMap;

if (incompleteTypeMap[np.entityTypeName]) 
  (incompleteTypeMap[np.entityTypeName])[np.associationName] = np;
else
   incompleteTypeMap[np.entityTypeName] = assocMap;
于 2013-01-17T17:11:50.260 回答
1

此错误已在微风 v 1.0.0 中修复。并感谢谢尔盖指出修复。

于 2013-01-29T02:45:46.477 回答
0

我怀疑是 EF 配置问题。

当有一个导航返回相关的用户实体时,您成功,但当您拥有三个这样的导航属性时,您会失败。您无需[InverseProperty]帮助 EF 解决问题,因为您不希望用户返回导航属性ModelType(我可以想象您为什么不想要它们)。

我认为您将不得不使用 Fluent API 来告诉 EF 您的意思。

于 2013-01-15T07:34:00.987 回答
0

我注释掉了 ForeignKey Attributes 并将其放在 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(). 我不知道在哪里放置任何其他配置,所以轻而易举地识别实体类型(SB/TL 未定义,因此例外)。

于 2013-01-15T10:02:58.907 回答