問題タブ [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.
database - 非クラスター化インデックスを作成すると、データベース (SQL Server 2008) の変更追跡が中断されますか?
データベース (SQL Server 2008) のパフォーマンスの問題を調査しています。SQL Management Studio は、このコードを使用して非クラスター化インデックスを追加することを提案しました。これにより、処理時間が 90% 以上短縮されます。
ただし、このコードを使用すると、データベースの変更追跡が中断されるのではないかと心配しています。
コードを別のデータベースでテストしたところ、問題ないように見えました。その結果、次に同期したとき (時々接続するクライアントから)、実際には余分なデータをアップロードまたはダウンロードしていないにもかかわらず、処理にはるかに長い時間がかかり、その後の同期は通常の速度に戻りました。 .
このコードは安全に実行できますか?
linq-to-sql - Linq to SQL: データベースに送信する前にコマンドを修正する
データベースに送信される前にコマンドを手動で変更できるようにする、Linq to SQL 内のどこかにフックはありますか?
具体的にはWITH CHANGE_TRACKING_CONTEXT(@contextData)
、挿入/更新/削除がデータベースに適用されるたびに、変更を開始したユーザーなど、変更追跡に対して追加情報を追加できるようにするために、構文を導入しようとしています (これは、 SQL 認証を使用します)。
(@contextData)
この構文は、追加のステートメントのデータを含む SqlCommand オブジェクトに追加される追加のパラメーターと共に、CommandText の先頭に挿入するだけで済みます。
前もって感謝します。
c# - LINQ-to-SQL を使用するときに、オブジェクトへの変更を透過的にログに記録する最良の方法は何ですか?
オブジェクトに加えられたすべての変更を追跡して、ユーザーがデータベース内の任意のアイテムの以前のバージョンを表示およびロールバックできるようにします。
履歴データベース テーブルは次のようになります。
現在、ユーザーがフォームに入力するたびにこれらの変更を記録するので、オブジェクトの古い状態と新しい状態の完全な情報を取得できます。
ただし、この履歴データのログをcodeから利用できるようにする必要があります。LINQ-to-SQLを使用する場合は透過的に動作する必要があります。つまり、開発者は余分な作業を行う必要はありません。つまり、次のコードは履歴テーブルへの書き込みも発生させる必要があります。
これを実現するには、次の2 つの方法があると想像できます。
- db.SubmitChanges() をオーバーライドしますが、問題は、変更を待っているオブジェクトにアクセスする方法です。
- ロギング メソッドをOnSubmitChangesイベントにアタッチしますが、これに対する解決策をまだ見つけることができませんでした
誰かがこの問題に取り組んだことがありますか、それを解決するための良いアプローチを知っていますか?
sql - オブジェクトのフィールド変更を追跡するための最適なアーキテクチャは何ですか?
SQLデータベースの上に構築されたWebアプリケーションがあります。いくつかの異なるタイプのオブジェクトにコメントを追加できます。これらのオブジェクトの一部には、ほとんどの問題追跡システム(ステータス、割り当て、優先度など)でフィールドの変更を追跡する方法と同様に、フィールドレベルの追跡が必要です。誰が変更したのか、以前の値は何だったのか、新しい値は何なのかを示したいと思います。
純粋な設計レベルでは、オブジェクトタイプ、オブジェクトの主キー、変更を行ったユーザーの主キー、フィールド名、および古い値と新しい値。私たちの場合、ユーザーが変更を行うときにコメントを入力した場合、これらにはオプションでコメントIDもあります。
ただし、このデータがどれだけ急速に増大する可能性があるので、これは最高のアーキテクチャですか?このタイプの機能をすでに大規模なアプリケーションに追加するために一般的に採用されている方法は何ですか?
[編集]私はこの質問に賞金をかけ始めています。主な理由は、スケールの処理に関して特に最適なアーキテクチャを見つけたいからです。Tom H.の答えは有益ですが、推奨される解決策はかなりサイズ効率が悪いようで(多くの列が変更されていなくても、オブジェクトの新しい状態ごとに新しい行が表示されます)、ユーザーが作成したフィールドへの変更も追跡できます。特に、一般的な問題追跡システム(JIRAなど)がこれをどのように実装したかを説明できる回答を受け入れる可能性があります。
sql-server-2008 - SQL Server 2008 の変更追跡
Change Tracking を使用して、SQL Server 2008 Enterprise/Standard インスタンスと Express 2008 インスタンス間の双方向同期を実装したいと考えています。
リモートの変更を読み取り、ローカル サーバーで調整を行う場合、それらのステートメントが追跡されないようにするにはどうすればよいでしょうか? あるサーバーが変更を追跡し、次に別のサーバーが変更を行い、変更も追跡し、別のサーバーが変更を行うという無限ループを予見します。
同期操作の実行中にそのテーブルで変更追跡を無効にすると、そのテーブルの他のプロセスからの変更が見逃される可能性があるため、それが答えだとは思いません。
ステートメントごとまたはトランザクションごとに変更追跡を無効にする方法はありますか?
編集: WITH CHANGE_TRACKING_CONTEXT コマンドを発見したので、それを使用して、同期コードによって変更がいつ実行されるかを指定し、同期コード自体がそれらを取得して使用しないようにすることができるかもしれません。
.net - LinqからSQLへのエンティティキャッシング/変更追跡動作のオーバーライド
おそらく、元の質問は長すぎて不要な詳細が多すぎると思うので、これは単純化するための私の試みです。
以下のアクションのいずれかを実行する手段を探しています。すべてではなく、1つだけ実行する必要があります。これらのいずれかに対する答えを誰かが知っている場合は、応答してください。したがって、LinqtoSQLで次のいずれかを実行することは可能ですか。
それらのエンティティを追跡するかどうかにかかわらず、エンティティを
DataContext
ビアから引き出しますか?ExecuteQuery
ExecuteMethodCall
それらのエンティティがすでに取得されており、IDキャッシュにすでに存在している場合でも、データベースから取得した結果の新しいコピーを常に呼び出す
ExecuteQuery
か、保証しますか?ExecuteMethodCall
特定のエンティティタイプで変更追跡を実行しないようにLinqtoSQLに指示しますが、他のタイプの変更追跡は許可しますか?
制限:
この
Refresh
方法は問題外です。エンティティの数は非常に多く、これはパフォーマンスの障害になります。クエリの実行後にに戻すことはできないため、単純にに設定することはできません。また、
ObjectTrackingEnabled
一部のエンティティを追跡する必要があります。false
DataContext
true
また、オリジナルを捨てて
DataContext
新しいものを使用することもできません。トランザクションの途中でこれを実行できる必要があります。
これは深刻な問題になり始めており、デフォルトの動作はよく考えられていないと思います。アドホッククエリまたはストアドプロシージャを実行すると、受け取る結果は、そのクエリによって返された正確な結果になると思います。それは理にかなっているだけです。古い、古いエンティティが必要な場合、なぜデータベースに戻ってそれらを取得するのでしょうか。
現時点での回避策は、(a)DataContext
クエリ用に特別に新しいものを作成し、トランザクション分離レベルをオーバーライドするか、(b)リターンタイプをすべての点でエンティティと同一であるが、[Table]
属性を作成し、AutoMapperを使用して元のエンティティにマップします。これらは両方とも恐ろしいハックのようです。
この難問について誰かが持っている提案を本当に感謝します。
wcf - Entity Framework: POCO アプローチによる SOA での変更追跡
階層化されたアプリケーションでは、WCF 呼び出しを介してデータベースにアクセスしています。リクエストごとにコンテキストを作成して破棄しています。また、POCOアプローチを使用しています。
私の質問は、純粋な POCO モデル (完全に永続的な無知な POCO) では、リクエストごとにコンテキストを作成および破棄している間 (以前のコンテキストがそのサービス呼び出しで破棄されるため)、変更を追跡することは可能ですか? はいの場合、EF はこの状況をどのように処理しますか? 私が見る限り、2 つのメカニズム (スナップショット ベースの変更追跡とプロキシを使用した通知ベースの変更追跡) ではこれを処理できませんか? そうでない場合、変更を追跡できるようにコンテキストをどのように処理する必要がありますか?
sql - Sql Server 2008 での変更追跡に関するアドバイス
私のクライアントは、アプリケーションで完全な監査証跡 (すべてのテーブルの履歴データの完全なビュー) を実行する方法を探しています。
テーブルのコピーを作成したり、フィールド名、フィールド値、変更者、変更者などを保存したりする昔ながらの方法を使用する以外に、Sql Server 2008 変更追跡の使用を検討していました。msdnでハウツー記事を
見つけました。
Sql Server 2008 の Change Tracking 機能を使用した (または POC を行った) 人はいますか? また、可能であれば、そこから何を望んでいたのか、何を見つけた/結論付けたのかを明記してください. 同じことに関するヒントは大歓迎です。
[編集]
1 週間経ってもまだ回答がありません。
nhibernate - NHibernate を使用して最終変更者と変更者を設定するためのベスト プラクティスは何ですか?
私のアプリケーションでは、レコードがいつ作成および変更され、どのユーザーがそれらのアクションを実行したかをキャプチャする必要がある状況があります。だから私は次のようなオブジェクトを持っているかもしれません:
NHibernate でこれらを処理するためのベスト プラクティスは何ですか? ここで説明されているようなインターセプターを使用して?
sql-server-2008 - SQLServer2008の変更の追跡を使用する場合と使用しない場合の同期
変更の追跡が有効になっているSQLServer2008を、このメカニズムがない2005のサーバーと同期することに固執しました。
私に正しい道を教えていただけませんか、どうすればこれを処理できますか。ありがとうございました、