0

マッピング モデルを使用してコア データの移行を行っています。

Report新しいモデルは、 というエンティティに関係を追加しrootReportます。

この関係をオプションではなく必須にしたいと思います。既存の Reportエンティティの場合rootReport、自己参照にする必要があります。今後追加されるレポートは、それ自体だけでなく、他のレポートをルートとして参照します。

私が提供したリンクには、マッピングモデルの式がどのように機能するかの概要がよくわかります。それらはNSExpressionと互換性があるものと同じです。これに基づいて、rootReport に次のマッピング ルールを使用しています。

FUNCTION($manager,
         "destinationInstancesForEntityMappingNamed:sourceInstances:",
         "ReportToReport", 
         $source.SELF)

[私はそれをフォーマットしました – ファイルでは、すべてが 1 行にまとめられています。]

ただし、これを rootReport リレーションで機能させることはできませんでした。rootReport が一部のレポートに設定されていないという苦情とともに、移行後に常に検証エラーが発生します。

NSUnderlyingError = "エラー ドメイン = NSCocoaErrorドメイン コード = 134110 \"操作を完了できませんでした. (Cocoa エラー 134110.)\" UserInfo=0x7b294630 {attribute=rootReport, entity=Report, reason=検証エラー 必須の宛先関係に属性値がありません}"

何がうまくいかないのか、またはデバッグ方法に関する提案についての手がかりはありますか? 処理はすべて App Kit で行われるため、例外が表示されるまでに、突っ込んで調査するコンテキストがありません。


完全に自動化されたマッピングから完全に手動化されたマッピングまでの階層と、ここにあるすべてのステップについて詳しく説明しています。

これらのマッピング式で何ができるか (少なくとも属性には有効)について詳しく知りたい場合は、ここここに良い記事があります。

プロジェクトから任意のコードを呼び出したり、データの既存のメソッドを呼び出すマッピング式を簡単に設定できます。それはすべてかなりきれいでエレガントです。

FUNCTIONこれは、デフォルトのリレーション マッピングが呼び出す式を使用して行います。クラス メソッドを呼び出すには、ここFUNCTION(CAST("<Class-Name>", "Class"), "<class-method-name>", <any>, <arguments>, <in>, <a>, <list>)に示すように使用します。

4

1 に答える 1

0

上記で何がうまくいかなかったのかわかりません。

マッピング モデルを作成した後で宛先データ モデルに変更を加えた可能性がありますが、これが問題になるとは思いもしませんでした。ただし、テキスト エディターでマッピング モデルを見ると、作成時のソース データ モデルとターゲット データ モデルを表していると思われる大きなバイナリ BLOB が含まれています。

マッピング モデルを削除して再作成したところ、フォームの自己参照に問題がなくなりました。

FUNCTION($manager,
        "destinationInstancesForEntityMappingNamed:sourceInstances:",
        "ReportToReport", 
        $source)

これは、質問で使用されている表現とほぼ同じですが、機能しないことがわかりました。この作業式は単に$source代わりに を使用していることに注意してください$source.SELF。ただし、以前にそれを試したことがあると確信しているので、これだけが間違っているかどうかはわかりません。

于 2015-04-10T10:37:02.083 に答える