プロジェクトに 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 列を使用することは受け入れられているため、これは有効な修正であると思いますが、間違っている場合は教えてください。
ありがとう