問題タブ [dbset]
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# - System.Entity.DbSetEntity Framework の動作メカニズム
DbSet
私は実際にどのように自分自身を設定するのだろうかと思っていました。
の定義が表示されている場合DbSet
、それは具象クラスです。
しかし、すべてのメソッドが実装されているわけではなく、interface
.
DbSet
クラスには基本クラスと多くのインターフェースがあることがわかります。しかし、それらのどれも実際にAdd
and のようなメソッドを実装していません。それを保持するメンバーはありませんDbContext
何が起こっているのだろうと思っていました。
したがって、この件に関して、最初の質問は..
メソッドはどこ
DbSet
に実装されますか?のメモリ内ストレージ (?) がありません
DbSet
。
皆様、お知恵を貸していただきありがとうございました。
c# - EntityFramework - DbSet を使用してエンティティを削除できない
EntityFramework の DbSet を使用してデータベースからオブジェクトを削除しようとしています。コードは次のとおりです。
次のエラーが表示されます:「オブジェクトが ObjectStateManager に見つからなかったため、オブジェクトを削除できません。」
誰かが私が間違っていることを教えてください。
entity-framework - EFは実行時にタイプからdbset名を取得します
目的: エンティティ typeof(UserAccount) = "UserAccounts" の dbset 名を取得する必要があります。しかし、実行時にはループに共通の型が必要なため、「UserAccount」の例がわかりません。typeofの「名前」だけ?
いくつかのエンティティで DbContext を作成しました。私はしばらくの間グーグルで調べてきましたが、タイプ変換のために機能していないようです?
この説明の最後にあるメソッドGetDbSetNameを参照してください。
私はこの EF についてはかなり新しいので、以下で説明するように私の問題を解決してください ;-)
出力を制御する Type のリストを定義します。
問題はタイプを使用して以下にあります-「UserAccount」を使用すると機能し、「UserAccounts」を取得します。しかし、一連のタイプのループにいるため、実行時に「UserAccount」がありません。私は e を与える Type リストしか持っていません
これが私に課題を与える方法です;-) コンパイルしないことを意味します。アセンブリがないと言っていますか?私はそれがかなり擬似的であることを知っていますが、これはスムーズに行うことができますか?
c# - DbSet で OrderBy を適用する
汎用リポジトリでページネーションとソートを実装しようとしています。DbSet の列ごとのデフォルトの順序として主キー列を取得する方法は?
c# - パラメータとして params object[] を持つメソッドをオーバーロードする方法
私たちのデータベースには、short と int を組み合わせたキーが存在するすべてのテーブルに主キーが定義されています。したがって、Entity Framework を使用して、要素のメソッドを呼び出して要素を見つけようとすることができますContext.DbSet<>.Find(params object[] parameters)
。私たちのコードでは、これは次のようになります。
ただし、このコードでは、構造体を使用してキー値を格納しています。構造体は次のとおりです。
他の比較メソッドなどがあります。次のように DbSet.Find メソッドを呼び出せるようにしたいと考えています。
これを可能にするために、このメソッドの拡張オーバーロードを作成しました。
Intellisense は、Find メソッドがオーバーロードされていることを通知するようになりました。一方のバージョンDbKey key
はパラメーターとして受け入れられ、もう一方の元のメソッドはパラメーターとして受け入れられますparams object[] parameters
。ただし、コードを実行すると、関数は常に元のメソッドを呼び出し、オーバーロードされたメソッドを呼び出すことはありません。これは、DbKey も元のパラメーターと一致し、例外が発生するためです。どうすればこの問題を解決できますか?
entity-framework - DBSet Add が失敗し、DBSet 内の既存の Customer エントリが破棄されるのはなぜですか?
私たちのプログラミングには、メモリ内データを使用したいくつかの模擬テストが含まれます。
次のコードでは、ループを使用して inMemoryDbSetCustomer の内容を確認しましたが、期待されるデータが含まれていました。
悲しいことに、新しい顧客を追加しようとすると、1) inMemoryDbSetCustomer が顧客の追加に失敗する 2) inMemoryDbSetCustomer.Add(someCust) が NULL を返す 3) inMemoryDbSetCustomer が他のすべての顧客エントリを失ったようです。
DBSet Add が失敗し、DBSet 内の既存の Customer エントリが破棄されるのはなぜですか?
回答で更新
@Werlang の提案に感謝します。次のコードの追加が役立ちました:
また、私のように Moq フレームワークを使用して DBSet をモックする場合は、同様の問題に直面する可能性があるため、次のスタック オーバーフローの投稿が役立ちます。
c# - DbSet を使用したオブジェクトの操作および IQueryableNSubstitute ではエラーが返されます
NSubstituteを使用して、DbSetをモックして Entity Framework 6.x を単体テストしたいと思います。幸いなことに、Scott Xuは優れた単体テスト ライブラリEntityFramework.Testing.Moq using Moqを提供しています。それで、私は彼のコードを NSubstitute に適したものに変更しました。これまでのところDbSet<T>.Add()
、DbSet<T>.Remove()
メソッドをテストしたいと思うまでは良さそうです。ここに私のコードビットがあります:
そして、次のようなテストメソッドを作成しました:
この問題は、テスト メソッドが を呼び出すときに発生しますset.Remove(blog)
。InvalidOperationException
のエラーメッセージをスローします
コレクションが変更されました。列挙操作が実行されない場合があります。
これは、メソッドが呼び出さdata
れたときに偽のオブジェクトが変更されているためです。set.Remove(blog)
ただし、元のスコットの使用方法Moq
では問題は発生しません。
したがって、set.Remove(blog)
メソッドをtry ... catch (InvalidOperationException ex)
ブロックでラップし、catch
ブロックが何もしないようにすると、テストは (もちろん) 例外をスローせず、期待どおりに渡されます。
これが解決策ではないことはわかっていますが、単体テストDbSet<T>.Add()
とDbSet<T>.Remove()
メソッドの目標を達成するにはどうすればよいですか?
c# - dbSet から主キー列を取得する
Entity
オブジェクトを受け取り、自動的に決定された主キーによって現在の値を見つけて更新する関数を書きたいと思います。
何か方向性を教えてください。
これは可能ですか?