問題タブ [objectcontext]
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# - MVC 3 - ObjectContext インスタンスが破棄され、接続を必要とする操作に使用できなくなりました
私は一般的に C# と MVC に非常に慣れておらず、テスト プロジェクトとして自分の小さなブログ サイトを作成しています。ここまではほとんど問題なく動作していますが、LINQ クエリから複数の列を選択する際に問題が発生しました。これを処理するために、生成されたエンティティ クラスを厳密に型指定されたモデルとして使用できることに気付いたのは、SO に関する質問に出くわした後でした。データベース層を作成しており(これも以前に使用したことがないものです)、その層を介して匿名型を渡そうとしても機能しなかったため、これが必要でした。なぜそうなったのかは理解できたので、正しい方向に向かっていることに満足しています。
しかし、このアプローチは私に別の問題を与えたようです。Categories テーブルから 2 つの列 (CategoryID と Name) を取得する簡単なテストを試みました。私は最初に次のことを試しました:
これにより、ビュー内のモデルを反復処理しようとすると、ObjectContext が破棄されたというエラーが発生しました。この質問を読んだ後、return ステートメントを using ブロックの外に移動し、次のようにモデルで AsEnumerable() を呼び出してみました。
ただし、ビューでモデルを反復しようとすると、同じ ObjectContext が破棄されたというエラーが引き続き表示されます。だから今、私はなぜエラーが発生しているのか理解できません。using ディレクティブを完全に削除しようとしましたが、別のエラーが発生します。
「エンティティまたは複合型 'MyProjectModel.Category' は、LINQ to Entities クエリで構築できません。」
それが役立つ場合は、私のビューに関連するコードを次に示します。
誰かが私に足りないものを教えてくれますか?
ありがとう。
c# - ObjectContext で使用できない DbContext 関数はありますか?
Microsoft には、DbContext 機能について説明した紹介記事があります。
それらのいくつかは、ObjectContext で見たことのない関連エンティティのフィルタリングなどです。
その機能は本当に DbContext にとって新しく、ObjectContext では利用できないのでしょうか? 他の「新しい」機能は何ですか? それとも、DbContext は ObjectContext と同じ機能を単純化した API に過ぎないのでしょうか?
entity-framework-4 - リポジトリと作業単位パターンで ObjectContext を適切に破棄する方法
私はEntity Framework 4を使用しており、Contextを作成し、パブリックプロパティを介してIContextインターフェイスとして公開するUnitOfWorkクラスを作成しました。Context クラスは ObjectContext から継承し、Poco エンティティをパブリック プロパティとして公開します。
また、そのコンテキストをコンストラクター パラメーターとして受け取り、リポジトリ クラスでクエリを実行するときにそのコンテキストを使用する、いくつかのリポジトリ クラスも作成しました。これは私がすべてを一緒に使用する方法です:
UnitOfWork クラスは IDisposable インターフェイスを実装し、その Dispose メソッド内で Context.Dispose() を呼び出します。
アプリケーションを閉じると、データベースで開いている接続が失われるので、質問は次のとおりです。ここで何が起こっているのですか? :-) データベースで開いている接続を閉じるために、UnitOfWork クラスで Context (ObjectContext) インスタンスを適切に破棄するにはどうすればよいですか?
asp.net-mvc-3 - これが NULL 値の例外をスローするのはなぜですか?
何らかの理由で、db.SaveChanges();
命令で次のエラーが発生します。
コントローラーコード:
デバッガーをステップ実行し、UserID が設定されていることを確認しました。
アップデート:
に変更db.AddToPortfolios(portfolio);
してみましdb.Portfolios.AddObject(portfolio);
たが、まだ同じ問題があります。
Portfolios
メソッドObjectSet
を使用する必要がありますか?Attach()
c# - HttpContextごとに1つのObjectContextのみを使用するC#Entity Framework
ASP.NET MVC 2で、Entity Framework 4を使用すると、「エンティティオブジェクトをIEntityChangeTrackerの複数のインスタンスで参照できません」というエラーが発生します。
SOを検索すると、HttpContextごとに1つのObjectContextインスタンスのみである必要があるのに、EntityFrameworkObjectContextのインスタンスが異なることが原因である可能性があります。
私はまさにそれをしているように見えるこのコード(私が参加するずっと前に書かれた)を持っています-すべてのHttpContextに対して1つのObjectContextを持っています。しかし、「IEntityChangeTracker」例外が頻繁に発生するため、意図したとおりに機能していない可能性があります。
私はこのコードを調べましたが、正しいように見えます。HttpContextごとに1つのObjectContextインスタンスを返すように指示できる限り、これは実行されます。コードは間違っていますか?
コードが間違っていない場合、「エンティティオブジェクトはIEntityChangeTrackerの複数のインスタンスで参照できません」という例外が発生するのはなぜですか?
編集:ObjectContextがどのように破棄されるかを示すには:
entity-framework - ObjectContext.Connection.BeginTransaction() は MSDTC を使用しますか?
Entity Framework の ObjectContext.Connection.BeginTransaction() メソッドが返すトランザクションが MSDTC (Microsoft Distributed Transaction Coordinator) のサポートを使用しているかどうかを確認したいですか?
MSDTC のサポートなしでトランザクションを使用する方法はありますか?
entity-framework - グローバル ObjectContext またはローカル オブジェクト?
Entity Framework とリポジトリ パターンから始めます。ObjectContext について混乱しています。必要になるたびにインスタンス化する方がよいでしょうか? 私はそのように使用しています:
c# - ObjectContext と DbContext の両方を使用する
シナリオ: あるデータベースから別のデータベースに情報を抽出して再配置しようとしています。DB A には取得したいデータがあります。少し異なる構造でDB Bに保存したいと思います。
DB AI は EDMX データベースで生成されたモデルを使用するため、ObjectContext の派生物を使用します。DB BI はコード生成を希望しています。そのため、パッケージ マネージャーを介して EntityFramework 4.1 をインストールすることにより、コード/モデル ファーストのアプローチを使用します。したがって、DB B は DbContext 派生物を使用します
DB A から DB B に情報を保存しようとすると、次のように表示されます。
テスト メソッド RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts が例外をスローしました: System.ArgumentException: 「DB A の EDMX モデル内のエンティティ」の概念モデル タイプが見つかりませんでした
実際には、DB B エンティティを DB B の派生 DbContext の DbSet プロパティに追加するときに実行されます。したがって、コードは次のようになります
上記の矢印 ("<--") でマークされたコード内のポイントで発生します。
FirstPVC は DB B のプロパティですが、矢印の時点で、DB B のコンテキストに属するエンティティの概念モデルがないことに不満を感じています。
DB B エンティティを DB B コンテキストに格納しようとしているので、これは奇妙です。DB A のエンティティを気にする必要があるのはなぜですか。
すべてのコンテキストが同じプロジェクトに含まれています。しかし、DB B の Derived DbContext は、それ自身の DbSet<> プロパティに関する知識しか持っていません。突然、DbSet<> プロパティに何かを追加しようとすると、上記の太字のエラーが表示されます。
なぜこれが起こるのか知っている人はいますか?DbContext が別のコンテキストのエンティティ、特に ObjectContext 派生クラスのエンティティを気にする必要があるのはなぜですか。
おそらく、それが不平を言っているエンティティがこのように見えることに注意することは役に立ちます
entity-framework-4 - ObjectContext.AddでParallel.ForEachの利点を使用します
汎用リポジトリパターンでEntityFrameworkを使用しています。次のメソッドを使用してオブジェクトを追加しました。
また、これを拡張して複数のエンティティをサポートすることも考えています。
上記のシナリオでループのParallel.ForEach
代わりに使用することには実際の利点がありますか?foreach
またSaveChanges()
、ループの最後まで呼び出していないので、たとえば主キー違反がある場合、それはループ内にスローされますか、それともSaveChanges()
呼び出されたときにスローされますか?変更をロールバックできますか?
c# - EntityFramework4-生成されたエンティティ内にObjectContext参照を埋め込みます
私はEntityFramework4.0を初めて使用し、C#で使用しており、現在その機能を試しています。
私が気付いたのは、ほとんどの同様のORMと同様に、生成されたエンティティで行われるデータ操作とCRUDステートメントの生成を処理するためにContextオブジェクトに依存していることです。
つまり、変更をデータベースに保存し直す場合は、エンティティをインスタンス化したObjectContextへの参照に常にアクセスできる必要があります。
アクセス可能なスコープ(たとえば、同じメソッド)でコンテキストが作成されている場合は問題ありませんが、エンティティまたはエンティティセットをメソッドに渡し、このメソッドに変更を保存させたい場合はどうなりますか?ObjectContextをパラメーターと一緒に渡すのが唯一の簡単な方法のようです。
別の解決策は、ObjectContextをある種のグローバル変数に配置することです。言うまでもなく、これらのアプローチの両方にスタイリングと保守性の問題があります。
要するに、私が想像できる最善の方法は、エンティティまたはエンティティセットからObjectContextへの参照を取得することです。デフォルトでは不可能であることを私は知っています。
エンティティからObjectContextを取得するための拡張メソッドの追加を示すメソッドを見つけました。ただし、関係のあるエンティティに対してのみ機能し、作成者によると、このメソッドの呼び出しにはコストがかかります。
T4テンプレートを変更して、すべてのエンティティにContextプロパティを追加し、エンティティのインスタンス化時に自動的に入力することを考えていました。
Entity Frameworkが生成されたクラスに最大長を適用するようにT4テンプレートを一度変更しました(JulieLermanのProgrammingEntity Framework 4の本に従ってください)。これまでのところ、T4構文を本当に楽しんでいるとは言えませんが、それが最善/唯一の方法である場合は、そうしてください...
誰かがすでにそうしましたか?これを処理し、彼のT4テンプレートを共有したり、これを行うためにフックするのに最適な部分的なメソッドやイベントを説明したりするための最良の方法は何でしょうか?
そのようなアプローチを使用することに大きな欠点はありますか?ObjectContextへの参照が非常に多いと、エンティティの一部がスコープ内に残っている場合、GCによる再収集の機能が妨げられたり遅れたりする可能性があると思いますが、実際にはObjectContextを使用できなくなりました。
どうもありがとう。