問題タブ [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.

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

c# - DbSetを作成するEntity Frameworkで動的に?

LINQ to SQLでは、を使用して動的にリポジトリを作成できますDataContext.GetTable<T>。特定のプロパティを宣言する以外に、Entity Framework 4でこれを行う同様の方法はありDbContextますか?例えば:

MySetsLINQ to SQLを使用して、次のように動的に参照を作成/取得する方法を知りたいです。

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

sql-server - C# の PK に関する愚かな状況: MVC3 は、渡された PK を使用して新しいレコードを挿入できず、主キーとして NULL を挿入しようとします

良い一日。MSSQL2008 データベースがあります。そして、既存のテーブル (VLAN) の 1 つに対して適切なモデルを作成しました。

VLAN モデルには次のフィールドがあります。

次に、新しい値を挿入しようとします

MSSQL は VLAN_ID フィールドに NULL 値を挿入できません。しかし、なぜ?実際の値を渡しますが、null ですか? どうしたの?次のメッセージが表示されます。

「列 'VLAN_ID'、テーブル 'VMMExt.dbo.VLANs' に値 NULL を挿入できません。列は NULL を許可しません。INSERT は失敗します。\r\nステートメントは終了しました。」ストリング

[Key] 属性を削除すると、VLAN テーブルにキー フィールドがないことについて、他の場所でエラーが発生しました。

これを修正して、提供された主キー値を強制的に挿入するにはどうすればよいですか?

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

entity-framework - DbSet.Find メソッドは、ID の .SingleOrDefault と比較して途方もなく遅い

次のコードがあります (データベースは SQL Server Compact 4.0 です):

これをプロファイリングすると、Find メソッドはわずか 60 レコードのテーブルから競合他社を取得するのに 300 ミリ秒以上かかります。

コードを次のように変更すると:

その後、競合他社はわずか 3 ミリ秒で見つかります。

競争者クラス:

流暢な API を使用しCompetitionSubscriptionsて多対多の関係を定義しました。OpponentMeetings

クラスの ID プロパティはCompetitorLong であり、Code First によってデータテーブルの主キーを持つ Identity 列に変換されます (SQL Server Compact 4.0)

ここで何が起こっているのですか??

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

asp.net-mvc - 一意のキーを使用してエンティティを見つける

私のasp.net mvc 3アプリケーションには、汎用リポジトリがあります。次のように、DbSet クラスの Find メソッドを使用して、主キーでエンティティを検索します。

一意のキーを使用してエンティティを見つける方法はありますか? DbSet クラスのソース コードが見つかりませんでした。可能であれば、DbSet クラスを拡張し、この目的のために新しいメソッドを追加したいと考えています。

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

c# - Linq 式: 汎用 DbSet を使用して max クエリを作成する

単体テスト用の偽データの作成を簡素化するために、一般的なエンティティ (他の多くのクラスの基になるオブジェクトとして使用する) を作成できる関数が必要です。エンティティにはインデックスがあり、新しいインデックスを生成するために、現在の最大数を見つけて追加したいだけです。

私は他の多くのクラスに Index を使用しており、この関数をできるだけ汎用的にしたいと考えています。私の問題は、ジェネリック関数で使用する DbSet を指定する方法がわからないことです GetMaxID

これは私がこれまでに得たものです:

_repository次のようなさまざまな IDbSets プロパティの束があります。

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

entity-framework - DbSet から IEnumerable に変換すると、クエリが実行されますか?

Logs リポジトリには次の 2 つの方法があります。

唯一の違いは、一方が Log の IEnumerable を返し、もう一方が Log の DbSet を返すことです。

私の資産コントローラーには、次のコードがあります

問題は、呼び出すレポ メソッドのいずれかに応じて、group by ステートメントでパフォーマンスに大きな違いが生じることです。

  • DbSet を返す getAllSet は非常に高速です。
  • GetAll が返す IEnumerable は本当に遅いです。

誰でもこれを説明できますか。GetAll で DbSet を IEnumerable に変換すると、クエリが実行されるため、大量のメモリ セットでグループ化を行っていたと考えていました。一方、GetAllSet は「ToList()」までクエリの実行を延期していたため、サーバー上でグループごとの作業を行っていました。

これは正しいです?これを説明する別の方法はありますか?

私は GetAll が IEnumerable を返すことを好みます。これは、IEnumerable に慣れていて、テストが少し簡単だからです。

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

asp.net-mvc-3 - C#、MVC3、ランタイム定義型で非ジェネリックDBSetを使用する方法は?

私はMVCとEFを初めて使用します。私のアプリは単純なコードです-最初にいくつかのPOCOクラスと次のようなDBContextがあります:

問題:データモデルにエンティティセットを追加する必要があります。そのタイプは実行時にユーザー入力から作成されます。つまり、データ構造がわかりません。

非ジェネリックDbsetクラスはこのためだけに作成されていることを読んだので、コンテキストに追加しました。

...そして、runtime-typeを受け入れ、新しいDbsetを設定するコンテキストのコンストラクターを作成しました。

(ちなみにタイプはReflection.Emitを使用して作成されています)。

コントローラでタイプ(LogRecという名前)を作成し、それを新しいDBContextインスタンスに渡します。次に、LogRecインスタンスを作成し、それをデータベースに追加しようとします。

そして、dbLog.Log.Add(testRec)から例外が発生します。

エンティティタイプLogRecは、現在のコンテキストのモデルの一部ではありません

私は何が間違っているのですか?これを行うためのより良い方法はありますか(できればEntity Frameworkを深く掘り下げずに)?

ありがとう

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

linq - EntityFrameworkdbsetを削除する最も効率的な方法

私は以下を持っており、レコードを削除するのではなく、レコードをループしてから一度に1つずつ削除するより効率的な方法を探しています(Dbsetを使用していることに注意してください)。

また、次のようなレコードが1つある場合も言います。

この1つのレコードを削除する最良の方法は何ですか?

次のことを試しましたが、エラーが発生しました。

次に、上記で示したように、1つのレコードだけを削除するためのforeachを実行しましたが、これは1つのレコードだけでは最も効率的ではありません。

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

c# - DbSetからDbContextを取得します

DbSetにいくつかの機能を追加するためのいくつかの拡張メソッドを開発しています。ただし、「Update」メソッドを作成する場合、エンティティの状態を変更できるようにするには、DbSetのDbContextが必要です。現在の実装:

DbSetインスタンスからDbContextを取得する方法を知っている人はいますか?

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

c# - エンティティフレームワークdbsetを使用してすべての行を取得します

次のタイプの構文を使用して、テーブルからすべての行を選択したいと思います。

私はEFにまったく慣れていないので、許してください。