問題タブ [change-tracking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework-4.1 - DbContext.ChangeTracker、DbContext.Entry() の不一致
デバッガーの下で、のエントリを返すケースがありDbContext.ChangeTracker.Entry(e)
ます。の検索結果と基になるエントリを列挙すると、(期待される)のエントリが見つかります。State
Detached
DbContext.ChangeTracker.Entries()
ObjectContext
e
State
Unchanged
何が起こっている?
追加の詳細は次のとおりです。
- POCO エンティティを使用します。
- 変更追跡はオンです
- プロキシの作成はオフです
- 遅延読み込みはオフです
- エンティティを初めて保存するとき (コンテキストへの追加など) には問題は発生しません。古いエンティティをコンテキストに取得してから変更しようとすると発生します。これは、変更されるべきではない多くの「参照」エンティティを含む集約ルートです
Equals
エンティティでオーバーライドされ、IEquatable<T>
実装されます。そのコードは T4 によって生成されます。- 私は、保存のためのルールを生成するように宣言的に構成された汎用リポジトリ実装を使用しています (たとえば、エンティティを追加、添付/変更、添付/未変更する必要があるかどうか。正しい順序でこれを行っているようです。たとえば、集約ルートが追加されます/attached を最後にアタッチすると、最初に他のエンティティが変更された状態で取り込まれるためです (変更されていないエンティティを最初に追加すると、これが防止されます)。
c# - Entity Frameworkが、変更されたがリセットされたプロパティの変更を検出するのはなぜですか?
POCOエンティティのプロパティを変更したが、リセットした場合でも、EntityFrameworkは変更があることを示しています。
変更されたエントリ:
このケースをどのように処理しますか?
c# - 更新時に切り離されたエンティティの個々のプロパティの変更を検出する方法は?
特定のイベントを発生させるために、EF 変更追跡を利用しています。たとえば、個人エンティティの電子メール アドレスが変更された場合、管理者などに電子メールを送信できます。
CheckForChangesOnAttach(entity)
データベースに現在のデータを照会し、切り離されたエンティティと比較して、特定のプロパティを更新済みとして設定するようなものを呼び出す簡単な方法があるかどうか疑問に思っています。切り離されたエンティティの大きなグラフを添付する以外に、自分で行うのはそれほど難しくないように思えます。そのため、そのようなものが組み込まれているかどうか疑問に思っています (最初にコードを使用しています)。
私たちのシステムは切り離されたエンティティをあまり処理しないので、99% の場合、そのようなものは必要ないので、パフォーマンスについてはあまり心配していません。
silverlight - トラッキング ビュー モデルの変更: いつ、どのように「トラッキングを開始」するか?
変更を追跡するビューモデルが必要なので、ユーザーは編集やロールバック部分に応じて物事が視覚的に変化するのを見ることができます。現在、ビュー モデルのコンストラクターの最後のステップとして、変更の追跡を「オン」にしています (ビュー モデルがテンプレートから構築されている場合やPropertyChanged
、構築が完了する前にトリガーされるデフォルト ロジックを持っている場合があるため、必要です)。ユーザーが何かを行う前であっても変更されます)。
これで大体はうまくいきましたが、
- ただし、より複雑なコントロール、バインディング、およびサードパーティ製品のさまざまなイベントの順序を制御する機能の欠如があります
- そして、ビューモデルがサービス呼び出しから返された DTO から構築された後に変更追跡を有効にする必要がある (つまり、モデル-モデル)。
変更の追跡を有効にするより良い場所はありますか?
c# - IsLoaded の私の理解は正しいですか?
これは、LINQPad で遊んでみたことに基づく私の仮定に沿ったコードです。これが遅延読み込みの仕組みであることを誰でも確認できますか?バックエンドでの動作を理解できるように、追加の洞察/リンクを提供してください。前もって感謝します!
- いくつかのレコードを取得します (DB が照会されます)。
- たまたま の外部キー プロパティであるレコードを取得する
record
ように遅延読み込みを使用せずrecord.ForeignKey
に取得します (DB がクエリされます)。 record
エンティティの詳細を取得します。- これは私が確信していない部分です。私のテストでは、出力されます
true
。IsLoaded はrecord.ForeignKey
、現在値があるかどうかを認識していませんが、そのrecord.ForeignKey
知識と確立された関係に基づいて、コンテキストで既に追跡されていることを認識しrecord.ForeignKeyId
ていると思います。 - db はここではヒットしていないようです。同じ理由
IsLoaded
で 4 で true が返されると思います。foreignKey
既にオブジェクトを追跡していることを認識しているため、遅延読み込みを行う必要がないことを認識しています。
編集:私が解決しようとしている実際の問題は、次のように説明できます。
diff - 構造化データドキュメント形式で変更追跡を埋め込むための戦略
特殊な構造化データドキュメント形式(おそらくXML)を設計する場合:このドキュメント形式の要件の一部は、メタデータセクションで、フィールドでの構造化データに対する意味のある(アプリレベルの)変更の履歴に対応することです。レベル。
少なくとも、有用な追跡情報は次のようになります。
- 著者識別子
- タイムスタンプ
- 変更の種類
- 何から変わったのか
データ項目とそのようなデータ項目のリストの両方を、有意義かつ効率的に追跡する必要があります。データスキーマは分離可能である必要があります/それを追跡するメタデータを認識していません-ノード識別子などの容易な注釈が必要になる場合がありますが。追跡を実施するには、信頼できるアプリケーションが必要になる場合があります。ただし、編集者が各変更をライブで追跡する必要はなく、バージョン間のデータセクションを比較することで、間隔を置いて「デルタ」を計算できると便利です。
「意味のある」追跡には、アプリケーションレベルで1つのデータポイントとして扱われるフィールドのグループへの更新など、上位レベルのデータ変更をアトミックに処理するメタデータスキーマが含まれる場合があります。
文字ごとまたはバイトごとのデータの場合、差分/パッチタイプのアルゴリズムが機能します。構造化データ(構造化データとして扱われる)には、より複雑なソリューションが必要なようです。
明確に定義された要件がないことを認識しています。ここでの私の質問の目的は、これらの問題がより優雅に検討されている場所を見つけることです。
構造化データドキュメント形式で変更追跡を埋め込むための戦略は何ですか?
ありがとう!
wcf - DTO からドメイン オブジェクトへのマッピング後に NHibernate でオブジェクト グラフへの変更を保存する
現在設計しているアプリケーションには、次のレイヤーがあります。
MSSQL < NHibernate < リポジトリ < WCF < Javascript
ホスティング Web ページ (EditOrder.aspx?id=104) のロード時に、JavaScript アプリケーションは WCF サービスを呼び出して、ID によって注文を取得します。ユーザーは UI を使用して、Order のプロパティを変更し、子 OrderLine を追加/変更/削除できます (注文には OrderLine のコレクションがあります)。
ユーザーが [保存] ボタンを押すと、javascript アプリケーションは Order with と OrderLine オブジェクトの配列を JSON として WCF サービスに送信します。
計画では、WCF サービスで AutoMapper を使用してドメイン オブジェクトと DTO をマッピングする予定です。ブラウザーによってポストされた DTO が WCF サービスによって受信されると、対応する Order ドメイン オブジェクト (その子 OrderLines を含む) にマップされます。
次に、リポジトリに渡されます。
ここで私の質問: NHibernate に注文の更新を依頼したときに、削除/挿入/変更された OrderLineItem の識別を処理させることは可能ですか? もしそうなら、これを機能させるには何が関係していますか?
更新: これは NHibernate Merge() メソッドが行うことですか?
ありがとう!
sql-server-2008 - 複数のテーブルのデータキャプチャを変更する
SQLServer2008。データベース内のいくつかの関連するテーブルの変更データキャプチャ(または変更追跡)を作成することは可能ですか?たとえば、多対多の関係。
それはどのように見えるでしょうか?
sql-server-2008 - SSISまたは変更追跡機能を備えた同期フレームワーク
これまで、私は主にLAMPアプリケーションを使用してきましたが、2つのSQL 2008サーバー間で双方向の同期を設定する必要があるプロジェクトがあります(1つはWebベースで、もう1つはファイアウォール内にあります)。たくさんの詳細な情報を見つけていますが、いくつかの基本的な質問に答えるのに苦労しています(下の太字)。
私がこれまでの私の読書に基づいてそれを理解するように:
- レプリケーションは、多くの一般的な問題を解決できるエンドツーエンドのソリューションですが、他のオプションほど柔軟ではありません。
- 変更追跡(SQL> = 2008)は、DBトランザクションに関する情報を記録し、その情報をシステムテーブルに格納できます。この情報には、標準のSQLクエリを介してアクセスし、他のツールと組み合わせて使用して、完全な同期ソリューションを構築できます。
- 同期フレームワークは、完全で柔軟な同期ソリューションのためにプログラミング言語(および変更追跡)と組み合わせて使用できるフレームワークです。
- SQL Server Integration Services(SSIS)は通常、SQLServerデータを別のデータソースと統合するときに使用されます。開発環境は習得が容易で、開発も迅速です。これもエンドツーエンドのソリューションだと思いますが、他のプログラミング言語と組み合わせて使用することもできます(新しいタスクの作成など)。
それらの理解に基づいて、ここに私の解決策があります:
同期の競合を解決するためのかなり複雑なロジックがあり、レプリケーションが除外されます(マージレプリケーションはロジックを処理できる場合がありますが、SQL 2008で利用可能な他のソリューションよりもオーバーヘッドがはるかに大きくなるようです)。
SQL Serverを初めて使用するので、SSISの使いやすさについて読んだものが本当に気に入っていますが、読んだほとんどの記事/例は、主にSQLServerを他のデータソースと統合するためのものであることを示しています。 SSISは同期に適したソリューションですか? 2008年の変更追跡によって記録されたデータも使用したいのですが、SSISを介してこのデータにアクセスできますか?
もう1つのオプションは、同期フレームワークと変更追跡を使用することです。これには、はるかに急な学習曲線が含まれます。 SSISと変更追跡ではなく、この組み合わせを使用する利点は何ですか?
MS同期テクノロジーと私のソリューションについての私の理解に関するすべてのコメントに感謝します。
クリス
sql-server - ストアド プロシージャ / CHANGETABLE 関数はパラメータで遅く、リテラルで高速
SQL2008 R2 で Change Tracking を使用していますが、バッチで影響を受ける行を特定しようとすると、非常に奇妙な動作が見られます。パラメータ値を使用すると、ストアド プロシージャの実行に約 30 秒かかりますが、リテラル値を呼び出しに入れると、 CHANGETABLE 関数に対しては、<1 秒で返されます。
次の呼び出しには約 30 秒かかります。
ただし、以下のように CHANGETABLE 行を変更すると、最大 1 秒に短縮されます。
SP1 を実行しているので、SQL2008 CU4 でリリースされた、CHANGETABLE が遅いというパッチが修正されたと思います (http://support.microsoft.com/kb/2276330)。
途方に暮れていますが、パラメーターをリテラル値に変更すると、なぜそれほど違いが生じるのでしょうか?