2

単方向の 1->n ナビゲーション (n->1 なし) のデータ構造がありますが、残念ながら API は制御できません。問題は、サービスからデータを取得すると、子が親に追加されないことです (サーバーから建物を受け取っても、建物コレクションは空のままです)。メタデータは手動で作成されます。

問題を追跡しようとしたところ、おそらく 12635 行目であることがわかりました。

if (!inverseProperty) return;

逆プロパティがない場合、見つかった関連エンティティは監視可能な配列にプッシュされません。ブリーズのドキュメントには次のように明示的に記載されているため、これは非常に奇妙です。

ナビゲーション プロパティの省略

関連の一方のナビゲーション プロパティを省略したい場合があります。たとえば、Person.Gender はあるが、Gender.Persons は必要ない場合などです。「男性」の性別エンティティからすべての男性の人物に移動する正当な理由はなく、そのナビゲーションのために監視可能な配列を更新するオーバーヘッドが発生する理由もありません。幸いなことに、関連付けの原則側でナビゲーション プロパティを省略できます。この例では Gender がプリンシパルであるため、Gender.Persons を省略できます。

定義は次のとおりです。

function addBuildingType(store) {
        store.addEntityType({
            shortName: 'Building',
            namespace: 'Helios',
            autoGeneratedKeyType: AutoGeneratedKeyType.Identity,
            dataProperties: {
                id: { dataType: DataType.Int32, isNullable: false, isPartOfKey: true },
                address: { dataType: DataType.String },
                city: { dataType: DataType.String },
                client: { dataType: DataType.String },
                contractNo: { dataType: DataType.Int32 },
                includedDevices: { dataType: DataType.Int32 },
                phoneNo: { dataType: DataType.String },
                totalDevices: { dataType: DataType.Int32 },
                zipCode: { dataType: DataType.String }
            }
        });
    } 

    function addScheduledEventType(store) {
        store.addEntityType({
            shortName: 'ScheduledEvent',
            namespace: 'Helios',
            autoGeneratedKeyType: AutoGeneratedKeyType.Identity,
            dataProperties: {
                id: { dataType: DataType.Int32, isNullable: false, isPartOfKey: true },
                startTime: { dataType: DataType.DateTime, isNullable: false },
                duration: { dataType: DataType.DateTimeOffset, isNullable: false }
            },
            navigationProperties: {
                buildings: { entityTypeName: "Building:#Helios", isScalar: false, associationName: "ScheduledEvent_Buildings" }
            }
        });

        store.registerEntityTypeCtor(
            'ScheduledEvent', null, scheduledEventInitializer);
    }

逆のプロパティを追加せずにこれを回避する方法についてのアイデアはありますか? それ以外の場合は、Edmunds のサンプルは私が行っていることとまったく同じように動作するため、逆のプロパティがあるという違いがあるため、すべてが機能するはずです。

4

1 に答える 1

2

編集現在入手可能な v Breeze 1.3.5 (2013 年 6 月 4 日) の時点で、これは修正されています。


これは既知のバグであり、すぐに修正できるように努めます...

最初に解決しようとしているものがいくつかありますが (NHibernate と Mongo のサンプル)、これは現在最優先のバグです。

このバグは単方向の 1 -> n でのみ発生することに注意してください。Breeze は単方向 n -> 1 (ほとんどのモデルでより一般的な発生) に問題はありません。

于 2013-05-28T17:10:25.573 に答える