0

プロジェクトに BreezeJS を使用しています。素晴らしいツールです。作成していただきありがとうございます。

2 列の主キーを持つテーブルがあります。また、このテーブルには、主キーの一部ではない ID 列があります。

クライアント側 JS で (メタデータの解析の一部として)、関数 parseCsdlSimpleProperty は、キーの一部ではないにもかかわらず、ID 列を解析した後、entityType の autoGeneratedKeyType を「Identity」に設定します。

var isPartOfKey = keyNamesOnServer != null && keyNamesOnServer.indexOf(csdlProperty.name) >= 0;
    if (parentType.autoGeneratedKeyType == AutoGeneratedKeyType.None) {
        if (isIdentityProperty(csdlProperty)) {
            parentType.autoGeneratedKeyType = AutoGeneratedKeyType.Identity;
        }
    }

これにより、エンティティがデータベースに保存された後に問題が発生します。saveChanges() を呼び出した後に返されるエンティティには、「キー フィックスアップの内部エラー - エンティティが見つかりません」というエラーの原因となる不正な KeyMapping があります。

このプロパティが主キーの一部であるかどうかも確認するために、ローカル コピーで変更しました。

var isPartOfKey = keyNamesOnServer != null && keyNamesOnServer.indexOf(csdlProperty.name) >= 0;
    if (parentType.autoGeneratedKeyType == AutoGeneratedKeyType.None && isPartOfKey) {
        if (isIdentityProperty(csdlProperty)) {
            parentType.autoGeneratedKeyType = AutoGeneratedKeyType.Identity;
        }
    }

主キーの外側で ID 列を使用することは受け入れられているため、これは有効な修正であると思いますが、間違っている場合は教えてください。

ありがとう

4

1 に答える 1

1

編集: 2013 年 5 月 8 日 - これは現在 v 1.3.3 で修正されており、Breeze Web サイトで入手できます。


Identity 列がキーではない可能性があるとは考えていませんでした。これは前に見たことがありませんが、合理的です。これについては、 Breeze User Voiceにリクエストを追加してください。私たちはこれらの要求を非常に真剣に受け止めています。一時的な回避策も調査しますが、これには数日かかる場合があります。

于 2013-05-08T16:18:20.437 に答える