1

我正在使用 durandaljs 和breathjs 做一个应用程序。我正在尝试获取导航属性的值。我的问题是,当我尝试在微风中调用此方法时:

user.entityAspect.loadNavigationProperty("userType");

我收到错误““'propertyOrExpr'参数必须是'字符串'”。以下代码部分会抛出此错误:

var q = new EntityQuery(navProperty.entityType.defaultResourceName);
var pred = buildNavigationPredicate(entity, navProperty);
q = q.where(pred);

问题是“pred”为空,因为“buildNavigationPredicate”返回 null。进入“buildNavigationPredicate”:

if (navigationProperty.foreignKeyNames.length === 0) return null;

问题是'foreignKeyNames'数组是空的,'navigationProperty'中的所有其余字段都被填充,但我不知道为什么,但我的服务器没有发送此信息。(foreignKeyNamesServer 也是空的)。

有人有同样的问题吗?会是微风的虫子吗?

谢谢。

4

2 回答 2

2

我昨天找到了解决方案,我没有时间刷新它。问题出在我的用户类的定义中。我首先使用 Web API 和 EF 代码。我的旧用户类是:

    public class User
{
    public Guid Id { get; set;}
    public string UserName { get; set; }
    public string Password { get; set; }
    public bool Active { get; set; }

    public virtual UserType UserType { get; set;}
}

要使用 user.loadNavigationProperty('userType'),我必须更改旧的用户类:

    public class User
{
    public Guid Id { get; set;}
    public string UserName { get; set; }
    public string Password { get; set; }
    public bool Active { get; set; }

    public Guid UserType_Id { get; set; }

    [ForeignKey("UserType_Id")]
    public virtual UserType UserType { get; set;}
}

这样做,我解决了这个问题。但是,我可以为多对多关系实施此解决方案。做了一些研究,我发现,微风目前不支持多对多关系。所以我唯一能做的就是在多对多关系中实现一个中间实体。

非常感谢 Ward 抽出宝贵时间。如果有任何其他方法可以解决这个问题,我会很乐意倾听。谢谢。

于 2013-03-02T10:08:50.823 回答
0

错误消息没有帮助。幸运的是,您已将问题追溯到缺少 foreignKeyNames。这表明您在导航属性的定义中遗漏了一些东西。出于某种原因,Breeze 没有检测到其中的 FK 属性UserUserType. 如果您使用 Web API 和 EF,您可能会确认在服务器上正确指定了 FK。

实际上,为了提供适当的帮助,我们必须查看您的类定义User,来自服务器的元数据部分描述UserUserType请不要打印整个元数据!EntityType )以及运行时返回的对象的快照manager.metadataStore.getEntityType('User')

于 2013-03-02T02:27:06.717 回答