1

durandaljsとbreezejsを使ってアプリを作っています。ナビゲーション プロパティの値を取得しようとしています。私の問題は、このメソッドを簡単に呼び出そうとしたときです。

user.entityAspect.loadNavigationProperty("userType");

「'propertyOrExpr' パラメーターは 'string' でなければなりません」というエラーが表示されます。このエラーは、コードの次のセクションでスローされます。

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

問題は、'buildNavigationPredicate' が null を返すため、'pred' が空であることです。「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;}
}

そして、それを行うと、私は問題を解決しました。ただし、多対多の関係に対してこのソリューションを実装できます。少し調べてみたところ、現時点では多対多のリレーションがそろっていないことがわかりました。したがって、私ができる唯一のことは、多対多の関係で中間エンティティを実装することです。

お時間を割いていただきありがとうございます。その問題を解決する他の方法があれば、喜んでお聞きします。ありがとう。

于 2013-03-02T10:08:50.823 に答える
0

エラー メッセージは役に立ちません。幸いなことに、問題の原因を特定したのは、foreignKeyNames の欠如です。これは、ナビゲーション プロパティの定義に何かが欠けていることを示唆しています。何らかの理由で、Breeze はその中の FK プロパティがUserに関連していることを検出していませんUserType。Web API と EF を使用している場合は、サーバーで FK が正しく指定されていることを確認できます。

User実際には、適切に支援するために、サーバーからのメタデータの一部である のクラス定義を確認する必要がUserありますUserType(メタデータ全体を出力しないでください!EntityType ) と、実行時に返されるオブジェクトのスナップショットmanager.metadataStore.getEntityType('User')

于 2013-03-02T02:27:06.717 に答える