問題タブ [self-tracking-entities]
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.
c# - 事前に生成されたビューを持つ自己追跡エンティティ
現在、.NET Entity FrameworkのSelfTrackingエンティティを使用していますが、クエリの実行を高速化したいと考えています。
誰もが最初に提案しているように見えるのは、コンパイル時にモデルのビューを生成することです。
ssdlファイルなどを使用して、プロジェクトでコンパイルされる「MyModel.Views.cs」を作成することができました。しかし、私はこれの利点をこれまで見たことがありませんか?ここで何かが足りませんか?自己追跡エンティティを使用している場合、これによるメリットはありませんか?
Entity Frameworkでパフォーマンスを向上させる他の方法はありますか?コンパイル済みビューを作成し、パラメーターを指定するにはどうすればよいですか?たとえば、検索クエリはさまざまな異なるパラメータを使用する必要がありますが、より高速にすることで実行できます。
ありがとう
wcf - Entity Framework 4.0 - WCF 経由でクライアントに複合型を送信できますか?
ねえ、誰でも次のシナリオが機能することを確認できますか:
- .NET 4.0 で 3 層アプリケーションを開発しています: Winforms クライアント、aspx サーバー、および SQL 2008 データベース。
- サーバーは、Entity Framework 4.0 を使用して SQL 2008 データベースと通信し、エンティティを STE の形式 (別のアセンブリ内) で、WCF を介してクライアント アプリケーションに返します。
ここで、SQL サーバーでストアド プロシージャを実行したいと考えています。これにより、カスタム形状のデータ形式が返されます (エンティティとの 1:1 マッピングではありません)。複雑な型を使用して、返されるデータを保持できることを読みました。
ここで質問: この複雑な型は WCF 経由でシリアル化できるので、クライアントもそれを操作できますか? そうだと思いますが、最終的な答えがどこにも見つからないようです。コーディングを進める前に確認したいと思います。
どうも !
TJ
entity-framework - 自己追跡エンティティとデータベースのタイムスタンプ列
Webアプリの楽観的同時実行シナリオでは、GUIDに相当するタイムスタンプ列(sqlserver)を各テーブルに与えることを検討しています。エンティティへのLinqはWHERE id = @p0 AND timestamp = @p1
、Entity Frameworkの特定の属性でタイムスタンプ列を装飾する場合のように、SQL更新クエリを生成します。返される更新されたレコードの数がである場合、0
同時実行例外が検出されました。
多くの投稿で、私は自己追跡エンティティについて読んでいます。これは、代替またはより良い解決策になる可能性があります。しかし、上記の「単純な」タイムスタンプ方式に勝る利点は見当たりませんでした。データベースが不変であり、タイムスタンプ列を提供しないシナリオは別として。
どのソリューションが優れているのか、そしてその理由は何ですか?
編集
Yury Tarabankoは、STEは別の概念であると正しく述べています。ただし、zeeshanhiraniの回答は、同時実行性チェックが変更を追跡する主な動機の1つであることを示しています。
質問を言い換えると、「タイムスタンプ列」メソッドが非常に簡単に見える場合に、なぜ誰もが同時実行チェックにSTEの概念を使用するのでしょうか。
entity-framework - 自己追跡エンティティ拡張メソッド
コンテキストが生成されると、いくつかの拡張メソッドがあることがわかります: AcceptChanges、MarkAsAdded、MarkAsDeleted、MarkAsModified。これらのメソッドはサービスでのみ使用できるため、いつ使用する必要がありますか?
c# - 自己追跡エンティティは、WCFサービスでUnchangedを返します
フロントエンドでMVP(Model View Presenter)を使用し、バックエンドでWCFサービスを使用して小さなn層Webアプリケーションをセットアップしました。これは、EF4.0と通信するDALの背後にあるBLLと通信します。 。これはすべて非常にうまく機能しています。すべて機能するいくつかのGetメソッドとAddメソッドを作成しました。ここで、いくつかのUpdateメソッドを作成したいと思いました。EF4.0のSelf-TrackingEntities(STE)を使用しているので、すべてがうまく機能し、実装はかなり簡単だと思いました。
これは当てはまらないようです。Webフロントエンドでアイテムを変更すると、WCFサービスに戻ったときにステータスが[変更されていません]のままになります。エンティティは変更されていないため、データベースでは何も更新されません。SOに関するこの質問を通じて:EF 4自己追跡エンティティが期待どおりに機能しない n層アプリケーションでのSTEの実装について、より詳細に説明している記事に出くわしました。(http://msdn.microsoft.com/en-us/magazine/ee335715.aspx)引用:
自己追跡エンティティテンプレートで生成されたエンティティコードをクライアントで再利用するようにしてください。 Visual Studioまたはその他のツールで[サービス参照の追加]によって生成されたプロキシコードを使用する場合、ほとんどの場合は正しく見えますが、エンティティが実際にクライアントでの変更を追跡していないことがわかります。
さて、私はこのコードを使用してサービスへのクライアントを作成することができました:
これはまったく問題なく機能しているようです。重要なのは、クライアントでシリアル化されたエンティティを取得するにはどうすればよいですか?コード例では、ライターが次のコードを使用していることがわかります。
しかし、私はそれらのオブジェクト/エンティティ/???がどこにあるのかわかりません。定義されている(私は顧客と製品について話している)
Add Service Referenceを使用して作成されたエンティティを使用してテストしましたが、機能していないようです。返されたエンティティのステータスはまだ変更されていません。
フロントエンドでEFエンティティを参照したくないのは、EFエンティティを分離したままにし、フロントエンドにシリアル化されたオブジェクトのみを配置したいからです。しかし、それが本当に必要な場合、私はそれをしなければならないかもしれません。
ああ、MarkAsModified()
エンティティオブジェクトでメソッドを使用することはうまく機能しますが、エンティティが自分のステータスを自分でチェックする必要があるため、これはハックのようなものです。
続行する方法について何かアドバイスはありますか?私の推測では、このMarkAsModiefied()
メソッドを使用するか、Webアプリケーションでエンティティモデルプロジェクトを参照することは実行可能な回避策になる可能性がありますが、もっと良いことがあれば、最初にそれを試してみたいと思います。
wcf - 自己追跡エンティティ-オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合しているため、AcceptChangesを続行できません
私はこの問題で1週間以上立ち往生しています。うまくいけば、誰かが私を正しい方向に向けることができます。
まず、スキーマの簡単な説明から始めます。
資産1--->1住所*->1地域*->1地域*->1国
パッケージ1->*アセット
自己追跡エンティティ(STE)+WCFを使用します。
手順:
- アセットのリストについては、データストアに電話してください。
- パッケージのリストについては、データストアに電話してください。
- ユーザーがパッケージを選択し、それにいくつかのアセットを割り当てます。
- パッケージを保存します。
ステップ2では、呼び出しはアドレスの積極的な読み込みを使用します。
これは、電話をかけようとしたときのエラーです
オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合しているため、AcceptChangesを続行できません。AcceptChangesを呼び出す前に、キー値が一意であることを確認してください。
編集
詮索した後、これはSTEの問題であることがわかりました。ここで概説したように、同じエンティティの複数のインスタンスを含むグラフを永続化できないという問題があります。これが私の質問です。
エンティティコレクションにエンティティを追加するにはどうすればよいですか。新しいエンティティには、すでにコレクションにあるものと同じキーを含む関連エンティティが含まれている場合があります。つまり、同じ住所、地域、地域、または国のエンティティを含む可能性のある新しいアセットを追加します。
これが私の制約です:
- UIに影響するため、ナビゲーションコレクションを使用する必要があります。
- データセットが大きすぎるため、関係するすべてのエンティティをプリフェッチできません。
- 履歴を保持し、それを使用して変更を「元に戻す」には、いつでもエンティティのスナップショットを撮ることができなければなりません。
私はDiegoBVegaによって提案された可能な解決策を知っていますが、それらは私の解決策に使用できるオプションではありません。他に何かアイデアはありますか?
c# - EF4 STE と MVC2 - ChangeTracker が POST しない
Entity Framework Self-Tracking-Entities を使用して MVC2 アプリをセットアップしようとしています。私のビューは、STE T4 テンプレートによって生成されたエンティティ タイプの厳密に型指定されたビューです。ここに私のGETがあります:
ここまでは順調ですね。ただし、このフォームが POST すると、ChangeTracker は null またはデフォルト値にリセットされるため、STE は自分自身を追跡することになっていることを突然忘れているように見えます。
強く型付けされたビューを STE 全体にぶら下げる (そして POST バックする) ための秘訣は何ですか? 元の値を取得してから変更を適用するために別の読み取りを行う必要がある場合、それは自己追跡エンティティの目的を無効にしているようですよね?
entity-framework - サーバー側で (自己追跡) エンティティ オブジェクトを作成して保存する方法は?
エンティティ フレームワーク 4.0 と自己追跡エンティティを使用して、次のことを達成しようとしています。
1) クライアント アプリケーションは、ISBN 番号を提供することにより、サーバーから書籍をリクエストします。
2) サーバーはデータベースに対してクエリを実行し、書籍が既に存在するかどうかを確認します。
3a) 本がデータベースにある場合は、それを返します。
3b) 本がデータベースにない場合、Amazon に情報を問い合わせ、必要な属性を抽出し、新しい本を作成してデータベースに保存し、クライアントに返します。
さて、3b) が問題です... サーバー側でエンティティ オブジェクト (本) を作成し、それをコンテキストに追加してデータベースに保存する方法に関する情報が見つかりません。私はあらゆる種類のことを試しました:
誰かが私が間違っていることを教えてもらえますか? 問題は EDMX モデルに関連しているようです。
Book エンティティと Author エンティティがあり、多対多の関係があります。
Book エンティティのキーは ISBN で、最大長 13 の文字列です。StoreGeneratedPattern は None に設定されます。
Author エンティティのキーは、Guid である Id です。StoreGeneratedPattern は ID です。
例外メッセージは次のとおりです。「列 'Id'、テーブル 'BookBrowser.dbo.Authors' に値 NULL を挿入できません。列は NULL を許可しません。INSERT は失敗します。ステートメントは終了しました。」
しかし、StoreGeneratedPattern が Identity に設定されているため、Id 値は自動的に作成されるべきではないでしょうか?
ありがとう、ピーター
c# - エンティティ フレームワークのセルフ トラッキング エンティティを使用して、明示的な読み込みを実行できますか?
「ビジネス」エンティティのグラフを返したいです。Business エンティティには、「連絡先」のコレクションがあります。
だから私は基本的にこれが欲しい:
問題は、ビジネスのすべての連絡先が必要ないことです。ContactTypeID = x を持つものだけです。どうすればこれを達成できますか? クエリを 2 つのステップに分割する必要があるかもしれないと考えました。1 つはビジネスを取得し、2 番目は連絡先を取得してビジネスに関連付けます。
しかし、私は STE t4 テンプレートを使用していますが、それを使用してそれを行う方法がわかりません。
助けていただければ幸いです。
c# - セルフ トラッキング エンティティ - ナビゲーション プロパティから削除しても状態が「削除済み」に設定されない
私の各POCOのコンストラクターには、次のものがあります。
POCO のいずれかのすべてのインスタンスで追跡がオンになっていることを確認します。エンティティ B の TrackableCollection を含むエンティティ A があります。エンティティ A のインスタンスを次のようにロードすると、次のようになります。
エンティティ A の ObjectsAddedToCollection プロパティを見ると、「未変更」のフラグが立てられたオブジェクトが 1 つあります。entityA.EntityB[0].MarkAsDeleted() を実行すると、状態が「削除済み」に設定されず、ObjectsRemovedFromCollection コレクションに移動されません。完全に削除されるだけです。再確認したところ、エンティティ A とエンティティ B の両方で ChangeTrackingEnabled が True に設定されています。これが機能しない理由はありますか? このため、子エンティティを削除してデータベースへの変更を永続化することはできません。