問題タブ [dbcontext]

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.

0 投票する
1 に答える
415 参照

c# - WCFサービスを介してエンティティを更新する方法

Entity Framework DbContextをローカルで動作させ、SQLデータベースに直接接続しました。

今、私はEntityFrameworkのものをWCFサービスの背後に配置しようとしています。WCFサービスは、基になるエンティティに対応する独自のサービスレイヤーオブジェクトのセット(DataContracts)を公開します。クライアントは、基盤となるデータストアとエンティティについて知ることはありません。

  • データの取得は簡単です。SQLと.ToList()へのLINQだけです。
  • 新しいオブジェクトの挿入はそれほど悪くはありません。クライアントからOperationContractを介してWCFサービスにDataContractを渡すと、WCFはDbContext.Add()、DbContext.SaveChanges()を呼び出します。

しかし、どうすれば更新できますか?PKを保持する必要がありますか?もしそうなら、それを行う通常の方法は何ですか?

あなたの助けは感謝されます。ありがとう。

0 投票する
1 に答える
2335 参照

asp.net-mvc - DbContext を使用するリポジトリをテストする最良の方法

私のプロジェクトでは、ASP.NET MVC アプリを簡単に単体テストするために、リポジトリ パターンに従います。これにより、オブジェクトを簡単にモックできます。

ただし、この方法でリポジトリ ロジックをテストしているわけではありません。

たとえば、次のブログ投稿を参照してください。

ASP.NET MVC でジェネリック リポジトリを操作し、それらをモックで単体テストする方法

これが私がしていることであり、ASP.NET MVC アプリをテストする方法です。

DbContextクラスを使用してデータにアクセスするリポジトリをテストする最良の方法は何だと思いますか?

  • データベースから直接データを取得しますか? (これは最悪だと思いますが、あなたの考えは不思議です)
  • 偽のデータベースを作成し、ダミー データを入力して、そのデータベースに接続するように EF を指定する必要がありますか?

そして、あなたが提案するかもしれない他のアプローチ。

編集:

ここではEF 4.2を使用しています。

0 投票する
1 に答える
239 参照

c# - データ プロバイダー インターフェイスの背後で DBContext 状態を管理する

(議論のために) 3 つの操作のみを公開するインターフェイス IDataProvider があります。

私は DBContext を使用して SQL CE にアクセスし、下にあるデータ アクセス層のデータ プロバイダーとして実装できます。

また

また

もちろん、3 つの実装は、接続とエンティティの状態に関して非常に異なる動作をします。インターフェイス「ルール」はこれにルールを適用しないため、どの実装が優れていますか? または、どちらか一方を強制する必要がある場合、それを実行できますか?

0 投票する
3 に答える
3828 参照

c# - Entity Framework 4.2:適切なデータベースエラーを取得する

ASP.NET MVC 3アプリケーションでは、EF4.2を使用しています。私のデータベースには、列に固有の制約があります。

何が得られるかを確認するために同じデータを挿入しようとしましたが、次のエラーが発生します。

エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。

内部例外の内部では、一意の制約に関する完全なエラーを確認できます。しかし、どうすればこの例外を一意にキャッチして、ユーザーにこれを伝えることができますか?

同じ値をもう一度入力しています。

これが私が現在していることです:

しかし、これは一般的なアプローチです。私がやりたいのは、具体的なメッセージを提供することです。

何かご意見は?

編集:

私は以下を疲れましたが、今回はそれを捕まえませんでした:

少し掘り下げてみるとSystem.Data.Entity.Infrastructure.DbUpdateException、例外番号を含まない例外タイプがスローされることがわかりました。

編集:

ここで私が問題を解決する方法を説明しますが、それが問題を解決する最良の方法ではないと確信しています。このコードをリファクタリングする方法はありますか?

0 投票する
2 に答える
4975 参照

entity-framework-4.1 - データベーストリガーで生成された主キー値で StoreGeneratedPattern.Identity を使用することはできませんか?

この質問は、私がここで尋ねた別の質問 ( Entity Framework 4.2 - データベースで生成された主キー値で TPT 継承を実現する方法は? ) に関連しており、トピックに記載されている問題に関する私の仮定が正しいかどうかを単純に明確にする必要があります。 .

問題(詳細):

  • EF (4.1) を使用して、既に存在するデータベースにアクセスしたい
  • データベースには、そのテーブルの主キー値の生成に関していくつかの制限があります (テーブル名を取り、次に利用可能な ID を返す UDF があります)
  • できるだけ簡単にするために、私の最初のアプローチは、ID 生成 UDF を呼び出して新しいデータ行の挿入時に新しい ID を設定するデータベース トリガーを (挿入前に) 定義することでした。
  • 次に、EDM の csdl 内の対応するエンティティの StoreGeneratedPattern プロパティを「Identity」に設定して、新しく生成された ID が DB に保存された後にエンティティ オブジェクトに設定されるようにします。

この結果は次のとおりです。

新しいエンティティ オブジェクトを作成し、それを DbContext に追加して SaveChanges を呼び出すと、対応するデータ行がデータベースに挿入されましたが、エンティティは新しいデータベース生成 ID で更新されませんでした。親の新しいIDが親に知られていないため、子エンティティの外部キープロパティを正しく設定できなかったため、相互に関連付けられている(親子)複数を一度に保存しようとしたときにこれに気付きましたDb コンテキスト。

これが、TPT 継承に関する上記の質問をした理由です。

数日間の調査と、この問題を解決するために頭に浮かんだすべてのことを試した後、これは単に機能しないことに気づきました。MSDN の StoreGeneratedPattern 列挙型のドキュメントとブログのいくつかの説明では、生成された値を取得するために StoreGeneratedPattern.Identity を設定する必要があることが示唆されていますが、DB が新しい行の挿入時に値を生成する場合、これは主キーの組み合わせには当てはまりません。データベーストリガー付き。

EF はデータベースで生成された値を取得するためにいくつかの基準が必要であり、ほとんどの場合、それはエンティティの ID になると思います。autoincrement (または ID 列など) に設定されたデータベース列の場合、DBMS は最後に挿入された ID 値 (MSSQL の @@identity など) を取得する機能を提供するため、問題はない可能性があります。しかし、トリガーを使用して新しい ID 値を生成する場合、EF は明らかに新しく挿入された行をクエリする方法を知りません (これを行うための適切な db に依存しない方法も想像できません)。

したがって、私の実際の質問は次のとおりです。上記の仮定は正しいですか、それともここで重要なことを見落としていますか?

これに関する明確化/インスピレーションを事前に感謝します。

編集(フォローアップの質問):

Ladislav からの回答を読んだ後、別の質問が発生します。

CSDL で StoreGeneratedPattern を設定した場合、SSDL で同じ値に設定する必要がありますか (逆も同様)? edm デザイナーのパッチは、CSDL で (デザイナーを介して) 変更すると、SSDL の StoreGeneratedPattern を自動的に同期するため、これが事実であることを暗示しています。

0 投票する
2 に答える
5501 参照

asp.net-mvc-3 - Dbcontextでの.NETMVC3ロールバック

MVC 3では、DbContext.SaveChanges()を呼び出した後にデータベースをロールバックすることは可能ですか?

私のエンティティクラス:

私がやろうとしているのは、ImageFileレコードをデータベースに挿入し、自動インクリメントされたIDを画像ファイル名として使用して、画像ファイルを別の場所に保存することです。System.IOに障害が発生した場合、データベースをロールバックしたいと思います。

ただし、上記のコードでは、次のエラーメッセージが表示されます。

0 投票する
2 に答える
18761 参照

c# - Dbcontextを使用したExecuteStoreQuery

Entity Frameworkの関数を使いたいのですが、コンテキスト変数にメソッドExecuteStoreQueryがないのではないかと思いました。ExecuteStoreQuery

それで、それがObjectContextクラスのメソッドであることを発見しましたが、私はすでにDbContext私のアプリケーションに使用しました。で変更しようとしただけですがDbContextObjectContextいくつかのエラーが発生しました(たとえば、ObjectContextではOnModelCreatingメソッドではありません)。

DbContextでどのように使用できますか?使用ExecuteStoreQueryできない場合はExecuteStoreQuery、DbContextの代替手段はありますか?

0 投票する
1 に答える
712 参照

sql-server - Entity Framework 4.2:PKのないテーブルのInsertFunction

Entity Framework 4.2で、PKのないテーブルに値を挿入しようとしています。EFは私に次のエラーを出します:

EntitySet'ConditionTypesForWebApplications'にはDefiningQueryがあり、現在の操作をサポートする<ModificationFunctionMapping>要素に<InsertFunction>要素が存在しないため、更新できません。

DbContext以下の説明から、edmxファイルを編集することでそれを微調整できることがわかりましたが、クラスで作業している場合は最善のケースではありません。

外部キーを使用してテーブルをADO.Netエンティティモデルの別のテーブルに更新するにはどうすればよいですか?

これを有効にするより良い方法はありますか?

0 投票する
1 に答える
752 参照

entity-framework - Code First で (同じベースの) 複数のコンテキストを動的に切り替える方法

DbContext私は、 (という名前の)が含まれるコアプロジェクトを持つソリューションに取り組んでCoreContextいます。このコンテキストには、一般的な製品に共通の検証規則を提供する抽象クラス (ProductConstraints) を参照するエンティティ (製品) が含まれます。このコンテキストが直接使用されることはありません。特定の製品のカスタム検証ルールを実装する (ProductXContext として) クラスCoreContextと(ProductXConstraints として) クラスの両方を継承する同じソリューションに、他に 3 つのプロジェクト (Product1、Product2、および Product3) があります。ProductConstraints

custom を含む別のプロジェクトもありますCodeFirstMembership。その「ユーザー」エンティティには、ユーザーが使用する製品を定義する「製品」プロパティが含まれています。

最後に、現在のユーザーの「製品」情報に基づいて適切なコンテキストをインスタンス化する MVC3 プロジェクトがあります。ContextFactoryこの製品を受け取り、正しい を返す のようなものを作成しますDbContext。いくつかのアプローチを試みましたが、大きな成功はありませんでした。

0 投票する
1 に答える
1640 参照

c# - EntityFramework4-foreachのレコードを更新しています

EF4とDBContextを使用してバックエンドデータベースにアクセスするアプリを作成しています。

アプリケーションのある時点で、レコードのセットをプルバックして繰り返し、値とタイムスタンプを更新します。

コード:

これを行っても、データベースの値は変更されません...タイムスタンプと値のフィールドは同じままです。

誰かが私を正しい方向に向けることができるでしょうか...?