1

編集:JSONが不完全で、一部を切り取る必要がありました

サーバーから初めてクエリを実行すると、どういうわけか、1 つのエンティティに EntityState "Added" が設定されます。DBContextInitializer で 3 人のユーザーを作成します。これは、アプリを起動するたびに発生します。を呼び出すと「Unchanged」状態になりますがManager.rejectChanges()、これは手動で行う必要があります。

私がそれを行わず、別のエンティティ(おそらくチーム/注文/注文詳細)を保存すると、特定のユーザーは元のエンティティのコピーとして保存され、一意のキーが名前などの値と同じになります。何かを忘れている可能性があるため、コードを何十回もチェックしましたが、この User-Entity の状態の変更をどこにも呼び出していません。

これはManager.getChanges(EntityType の "User") の出力です:

[
[
    {
        "entityAspect": {
            "entityGroup": {
                "entityManager": {
                    "serviceName": "api/Breeze/",
                    "metadataStore": {
                        "namingConvention": {
                            "name": "noChange"
                        },
                        "localQueryComparisonOptions": {
                            "name": "caseInsensitiveSQL",
                            "isCaseSensitive": false,
                            "usesSql92CompliantStringComparison": true
                        },
                        "dataServices": [
                            {
                                "serviceName": "api/Breeze/",
                                "adapterName": null,
                                "hasServerMetadata": true
                            }
                        ],
                        "_resourceEntityTypeMap": {
                            "Mvls": "Mvl:#MAHN.Model",
                            "MvlOps": "MvlOP:#MAHN.Model",
                            "StatusOps": "StatusOP:#MAHN.Model",
                            "Teams": "Team:#MAHN.Model",
                            "TeamLeaders": "TeamLeaders:#MAHN.Model",
                            "Users": "User:#MAHN.Model",
                            "TeamUsers": "TeamUsers:#MAHN.Model",
                            "UserRoles": "UserRoles:#MAHN.Model",
                            "Roles": "Role:#MAHN.Model",
                            "TeamRoles": "TeamRoles:#MAHN.Model"
                        },
                        "_entityTypeResourceMap": {
                            "Mvl:#MAHN.Model": "Mvls",
                            "MvlOP:#MAHN.Model": "MvlOps",
                            "StatusOP:#MAHN.Model": "StatusOps",
                            "Team:#MAHN.Model": "Teams",
                            "TeamLeaders:#MAHN.Model": "TeamLeaders",
                            "User:#MAHN.Model": "Users",
                            "TeamUsers:#MAHN.Model": "TeamUsers",
                            "UserRoles:#MAHN.Model": "UserRoles",
                            "Role:#MAHN.Model": "Roles",
                            "TeamRoles:#MAHN.Model": "TeamRoles"
                        },
                        "_entityTypeMap": {
                          "User:#MAHN.Model": {
                                "name": "User:#MAHN.Model",
                                "shortName": "User",
                                "namespace": "MAHN.Model",
                                "defaultResourceName": "Users",
                                "dataProperties": [
                                    {
                                        "name": "UserId",
                                        "nameOnServer": "UserId",
                                        "dataType": "Int32",
                                        "isNullable": false,
                                        "defaultValue": 0,
                                        "validators": [
                                            {
                                                "validatorName": "required"
                                            },
                                            {
                                                "validatorName": "int32"
                                            }
                                        ],
                                        "isPartOfKey": true
                                    },
                                    {
                                        "name": "UserName",
                                        "nameOnServer": "UserName",
                                        "dataType": "String",
                                        "isNullable": true,
                                        "fixedLength": false,
                                        "validators": [
                                            {
                                                "validatorName": "string"
                                            }
                                        ],
                                        "isPartOfKey": false
                                    },
                                    {
                                        "name": "Nachname",
                                        "nameOnServer": "Nachname",
                                        "dataType": "String",
                                        "isNullable": true,
                                        "fixedLength": false,
                                        "validators": [
                                            {
                                                "validatorName": "string"
                                            }
                                        ],
                                        "isPartOfKey": false
                                    },
                                    {
                                        "name": "Vorname",
                                        "nameOnServer": "Vorname",
                                        "dataType": "String",
                                        "isNullable": true,
                                        "fixedLength": false,
                                        "validators": [
                                            {
                                                "validatorName": "string"
                                            }
                                        ],
                                        "isPartOfKey": false
                                    },
                                    {
                                        "name": "OasisLogin",
                                        "nameOnServer": "OasisLogin",
                                        "dataType": "String",
                                        "isNullable": true,
                                        "fixedLength": false,
                                        "validators": [
                                            {
                                                "validatorName": "string"
                                            }
                                        ],
                                        "isPartOfKey": false
                                    }
                                ],
                                "navigationProperties": [
                                    {
                                        "name": "TeamUsers",
                                        "nameOnServer": "TeamUsers",
                                        "entityTypeName": "TeamUsers:#MAHN.Model",
                                        "isScalar": false,
                                        "associationName": "TeamUsers_User",
                                        "foreignKeyNames": [],
                                        "foreignKeyNamesOnServer": [],
                                        "validators": []
                                    },
                                    {
                                        "name": "UserRoles",
                                        "nameOnServer": "UserRoles",
                                        "entityTypeName": "UserRoles:#MAHN.Model",
                                        "isScalar": false,
                                        "associationName": "UserRoles_User",
                                        "foreignKeyNames": [],
                                        "foreignKeyNamesOnServer": [],
                                        "validators": []
                                    }
                                ],
                                "autoGeneratedKeyType": "Identity",
                                "validators": []
                            },


                        "Team:#MAHN.Model": {
                            "entityType": {
                                "name": "Team:#MAHN.Model",
                                "shortName": "Team",
                                "namespace": "MAHN.Model",
                                "defaultResourceName": "Teams",
                                "autoGeneratedKeyType": "Identity"
                            },
                            "_indexMap": {
                                "1": 1,
                                "2": 0,
                                "3": 2,
                                "4": 3
                            },
                            "_entities": [
                                {
                                    "entityAspect": {
                                        "entityState": {
                                            "_$typeName": "EntityState",
                                            "name": "Unchanged"
                                        },
                                        "isBeingSaved": false,
                                        "originalValues": {},
                                        "_validationErrors": {},
                                        "validationErrorsChanged": {
                                            "name": "validationErrorsChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "propertyChanged": {
                                            "name": "propertyChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "_entityKey": {
                                            "entityType": "Team:#MAHN.Model",
                                            "values": [
                                                2
                                            ]
                                        },
                                        "wasLoaded": true
                                    }
                                },
                                {
                                    "entityAspect": {
                                        "entityState": {
                                            "_$typeName": "EntityState",
                                            "name": "Unchanged"
                                        },
                                        "isBeingSaved": false,
                                        "originalValues": {},
                                        "_validationErrors": {},
                                        "validationErrorsChanged": {
                                            "name": "validationErrorsChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "propertyChanged": {
                                            "name": "propertyChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "_entityKey": {
                                            "entityType": "Team:#MAHN.Model",
                                            "values": [
                                                1
                                            ]
                                        },
                                        "wasLoaded": true
                                    }
                                },
                                {
                                    "entityAspect": {
                                        "entityState": {
                                            "_$typeName": "EntityState",
                                            "name": "Unchanged"
                                        },
                                        "isBeingSaved": false,
                                        "originalValues": {},
                                        "_validationErrors": {},
                                        "validationErrorsChanged": {
                                            "name": "validationErrorsChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "propertyChanged": {
                                            "name": "propertyChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "_entityKey": {
                                            "entityType": "Team:#MAHN.Model",
                                            "values": [
                                                3
                                            ]
                                        },
                                        "wasLoaded": true
                                    }
                                },
                                {
                                    "entityAspect": {
                                        "entityState": {
                                            "_$typeName": "EntityState",
                                            "name": "Unchanged"
                                        },
                                        "isBeingSaved": false,
                                        "originalValues": {},
                                        "_validationErrors": {},
                                        "validationErrorsChanged": {
                                            "name": "validationErrorsChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "propertyChanged": {
                                            "name": "propertyChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "_entityKey": {
                                            "entityType": "Team:#MAHN.Model",
                                            "values": [
                                                4
                                            ]
                                        },
                                        "wasLoaded": true
                                    }
                                }
                            ],
                            "_emptyIndexes": []
                        },
                        "TeamLeaders:#MAHN.Model": {
                            "entityType": {
                                "name": "TeamLeaders:#MAHN.Model",
                                "shortName": "TeamLeaders",
                                "namespace": "MAHN.Model",
                                "defaultResourceName": "TeamLeaders",
                                "autoGeneratedKeyType": "Identity"
                            },
                            "_indexMap": {
                                "1": 0
                            },
                            "_entities": [
                                {
                                    "entityAspect": {
                                        "entityState": {
                                            "_$typeName": "EntityState",
                                            "name": "Unchanged"
                                        },
                                        "isBeingSaved": false,
                                        "originalValues": {},
                                        "_validationErrors": {},
                                        "validationErrorsChanged": {
                                            "name": "validationErrorsChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "propertyChanged": {
                                            "name": "propertyChanged_entityAspect",
                                            "_nextUnsubKey": 1
                                        },
                                        "_entityKey": {
                                            "entityType": "TeamLeaders:#MAHN.Model",
                                            "values": [
                                                1
                                            ]
                                        },
                                        "wasLoaded": true
                                    }
                                }
                            ],
                            "_emptyIndexes": []
                        }
                    },
                    "_unattachedChildrenMap": {
                        "map": {}
                    },
                    "keyGenerator": {
                        "_tempIdMap": {},
                        "nextNumber": -1,
                        "nextNumberIncrement": -1,
                        "stringPrefix": "K_"
                    },
                    "_hasChanges": true
                },
                "entityType": {
                    "name": "User:#MAHN.Model",
                    "shortName": "User",
                    "namespace": "MAHN.Model",
                    "defaultResourceName": "Users",
                    "autoGeneratedKeyType": "Identity"
                },
                "_indexMap": {
                    "1": 2,
                    "2": 0,
                    "3": 1
                },
                "_entities": [
                    {
                        "entityAspect": {
                            "entityState": {
                                "_$typeName": "EntityState",
                                "name": "Unchanged"
                            },
                            "isBeingSaved": false,
                            "originalValues": {},
                            "_validationErrors": {},
                            "validationErrorsChanged": {
                                "name": "validationErrorsChanged_entityAspect",
                                "_nextUnsubKey": 1
                            },
                            "propertyChanged": {
                                "name": "propertyChanged_entityAspect",
                                "_nextUnsubKey": 1
                            },
                            "_entityKey": {
                                "entityType": "User:#MAHN.Model",
                                "values": [
                                    2
                                ]
                            },
                            "wasLoaded": true
                        }
                    },
                    {
                        "entityAspect": {
                            "entityState": {
                                "_$typeName": "EntityState",
                                "name": "Unchanged"
                            },
                            "isBeingSaved": false,
                            "originalValues": {},
                            "_validationErrors": {},
                            "validationErrorsChanged": {
                                "name": "validationErrorsChanged_entityAspect",
                                "_nextUnsubKey": 1
                            },
                            "propertyChanged": {
                                "name": "propertyChanged_entityAspect",
                                "_nextUnsubKey": 1
                            },
                            "_entityKey": {
                                "entityType": "User:#MAHN.Model",
                                "values": [
                                    3
                                ]
                            },
                            "wasLoaded": true
                        }
                    },
                    null
                ],
                "_emptyIndexes": []
            },
            "entityState": {
                "_$typeName": "EntityState",
                "name": "Added"
            },
            "isBeingSaved": false,
            "originalValues": {},
            "_validationErrors": {},
            "validationErrorsChanged": {
                "name": "validationErrorsChanged_entityAspect",
                "_nextUnsubKey": 1
            },
            "propertyChanged": {
                "name": "propertyChanged_entityAspect",
                "_nextUnsubKey": 1
            },
            "_entityKey": {
                "entityType": "User:#MAHN.Model",
                "values": [
                    1
                ]
            },
            "wasLoaded": true
        }
    }
 ]
]

ここからはあまり情報を引き出すことはできませんが、この特別な部分は奇妙だと思います。この配列の 3 番目のオブジェクトが、nullその配列の直後に State "Added" で表示されるのはなぜですか。

"_entities": [
                {
                    "entityAspect": {
                        "entityState": {
                            "_$typeName": "EntityState",
                            "name": "Unchanged"
                        },
                        "isBeingSaved": false,
                        "originalValues": {},
                        "_validationErrors": {},
                        "validationErrorsChanged": {
                            "name": "validationErrorsChanged_entityAspect",
                            "_nextUnsubKey": 1
                        },
                        "propertyChanged": {
                            "name": "propertyChanged_entityAspect",
                            "_nextUnsubKey": 1
                        },
                        "_entityKey": {
                            "entityType": "User:#MAHN.Model",
                            "values": [
                                2
                            ]
                        },
                        "wasLoaded": true
                    }
                },
                {
                    "entityAspect": {
                        "entityState": {
                            "_$typeName": "EntityState",
                            "name": "Unchanged"
                        },
                        "isBeingSaved": false,
                        "originalValues": {},
                        "_validationErrors": {},
                        "validationErrorsChanged": {
                            "name": "validationErrorsChanged_entityAspect",
                            "_nextUnsubKey": 1
                        },
                        "propertyChanged": {
                            "name": "propertyChanged_entityAspect",
                            "_nextUnsubKey": 1
                        },
                        "_entityKey": {
                            "entityType": "User:#MAHN.Model",
                            "values": [
                                3
                            ]
                        },
                        "wasLoaded": true
                    }
                },
                null
            ],

それが役立つ場合は、より多くの情報を提供できます。

4

4 に答える 4

1

サーバー上の特定のエンティティ グラフにバグがあり、クライアントにシリアル化されたときに誤った entityState の変更が発生しました。これは、breeze Web サイトまたは nuget から入手できる v0.74.2 で修正する必要があります。これで問題が解決したかどうかをお知らせください。

于 2012-11-30T02:24:42.667 に答える
1

同じ問題があります。私の場合、これを引き起こすのは、結果に含まれるナビゲーション プロパティ (多数) であることがわかりました。これについてはまだ調査中ですが、Breeze の updateRelatedEntityInCollection() は、「メイン」オブジェクトと一緒に受け取った関連オブジェクトを接続するときに「追加済み」を設定するようです。

function updateRelatedEntityInCollection(relatedEntity, relatedEntities, targetEntity, inverseProperty) {
        if (!relatedEntity) return;
        // check if the related entity is already hooked up
        var thisEntity = relatedEntity.getProperty(inverseProperty.name);
        if (thisEntity !== targetEntity) {
            // if not - hook it up.
            relatedEntities.push(relatedEntity); // <-- THIS WILL SET "ADDED" ON targetEntity
            relatedEntity.setProperty(inverseProperty.name, targetEntity);
        }
    }
于 2012-11-27T12:35:27.473 に答える
0

手伝いたいのですが、行き詰まっていることを感謝します。残念ながら、私はあなたが提供したものであまり進歩することができません。もっと簡単な問題の説明と例でもう一度試してみましょう。

良いスタートは、サービスへの単純なHTTP呼び出しからのデータを調べることです。ブラウザのアドレスバーに次のように入力してみてください
http://localhost:12345/api/your-service/users

。作成した3人のユーザーのJSONデータが表示されます。

次に、クライアントでそれらをフェッチしてみます。

var em = new breeze.EntityManager('api / your-service');
var q = breeze.EntityQuery.from('Users')
        .using(em).execute()
        .then(querySucceeded)
        .fail(queryFailed);

関数querySucceeded(data){
    var users = data.results;
    varchanges = em.getChanges();
    var msg="ユーザー数="+users.length +
              ";保留中の変更="+Changes.length;
    alert(msg);

関数queryFailed(error){
   alert('クエリに失敗しました:' + error.message);
}

アラートボックスで、3人のユーザーがいて、ゼロ以外の保留中の変更があることが確認された場合...私たちが歯を食い込ませることができる何かがあります。

于 2012-11-27T00:12:34.580 に答える
0

私はこれを v 0.73.6 でテストしており、「updateRelatedEntityInCollection」メソッドが内部的に呼び出されていることを確認しています。

現時点では、entityManager.hasChanges() が true を返す、または EntityManager.getChanges() が任意のクエリの結果として任意のエンティティを返すという問題を再現できませんでした。

クエリ「expands」、「loadNavigationProperty」を使用して、QueryOptions.MergeStrategy をすべて変更しようとしましたが、これを再現できませんでした。そのため、追加のヒントは非常に役立ちます。

于 2012-11-28T20:59:41.287 に答える