2

exportEntities を実行すると、breeze はプロパティを削除して配列にポップすることで、エンティティを平坦化する魔法を実行します。単純なプロパティのみを持つエンティティでは、entityAspect がコピーされないため、循環参照が防止されます。ただし、複雑なプロパティは平坦化されておらず、この entityAspect が残っているため、breeze が JSON.stringify(); を呼び出そうとすると循環構造例外が発生します。

この問題を再現するコードを次に示します。

var jsonMetadata = {
    "metadataVersion": "1.0.3",
    "dataServices": [
        {
            "serviceName": "api/Foo/",
            "hasServerMetadata": false,
            "jsonResultsAdapter": "webApi_default",
            "useJsonp": false
        }
    ],
    "structuralTypes": [
        {
            "shortName": "address",
            "namespace": "YourNamespace",
            "isComplexType": true,
            "dataProperties": [
                {  "name": "street", "dataType": "String" },
                {  "name": "city", "dataType": "String" },
                {  "name": "country", "dataType": "String" }
            ]
        },
        {
            "shortName": "person",
            "namespace": "YourNamespace",
            "dataProperties": [
                {  "name": "id", "dataType": "Int32", isPartOfKey: true },
                {  "name": "name", "dataType": "String" },
                {  "name": "hobbies", "dataType": "String" },
                {  "name": "address", "complexTypeName": "address:#YourNamespace" }
            ] }
    ]
};

var manager = new breeze.EntityManager();
manager.metadataStore.importMetadata(jsonMetadata)

var person = manager.createEntity('person', {id: 1});
person.address.street = "Sample Street";

console.log("Complex property is a circular datatype, cannot convert to JSON - that's fine")
// JSON.stringify(person.address); // fails with error

console.log("... except that manager.exportEntities() doesn't handle that case!");
manager.exportEntities(); // also fails

編集: おっと、お粗末なフォーム、質問を省略: これはバグですか?

4

1 に答える 1

1

これはバグであり、Breeze v 1.3.5 で修正されており、現在 nuget および Breeze Web サイトから入手できます。

そして...良い再現。感謝しています。

于 2013-06-04T21:38:12.403 に答える