[解決済み】DbSetを使用しない生のSQLクエリ - Entity Framework Core
質問
Entity Frameworkのコア削除で
dbData.Database.SqlQuery<SomeModel>
テーブルデータとランクを返す全文検索クエリ用の生のSQLクエリを構築するソリューションが見つかりません。
Entity Framework Core で生の SQL クエリを構築する方法は、私が見た限り、次のとおりです。
dbData.Product.FromSql("SQL SCRIPT");
これは、クエリで返すランクをマッピングするDbSetがないため、役に立ちません。
何かアイデアはありますか?
解決方法は?
を使用しているかどうかによります。 EFコア2.1 または EF Core 3 以降のバージョン .
EF Core 2.1 を使用している場合
2018年5月7日から利用可能なEF Core 2.1 Release Candidate 1を使用している場合、提案されている新機能であるQuery typeを利用することができます。
とは クエリタイプ ?
エンティティタイプに加えて、EF Coreモデルはクエリタイプを含むことができます。 のデータに対してデータベースクエリを実行するために使用されます。 は、エンティティ型にマッピングされていない。
クエリタイプはどのような場合に使用するのですか?
その場しのぎの FromSql() クエリの戻り値型として使用します。
データベースビューへのマッピング。
主キーが定義されていないテーブルへのマッピング。
モデルで定義されたクエリへのマッピング。
そのため、質問の回答として提案されたすべてのハックや回避策を行う必要はもうありません。以下のステップを踏むだけです。
まず、新しいプロパティを定義し、そのタイプは
DbQuery<T>
ここで
T
は、SQL クエリのカラムの値を保持するクラスの型です。ですから
DbContext
とすると、こうなります。
public DbQuery<SomeModel> SomeModels { get; set; }
次に
FromSql
メソッドと同じように
DbSet<T>
:
var result = context.SomeModels.FromSql("SQL_SCRIPT").ToList();
var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();
また、以下のことに注意してください。
DdContext
は
部分クラス
そのため、'raw SQL DbQuery' の定義を整理するために、1つまたは複数の別々のファイルを作成することができます。
EF Core 3.0以上のバージョンを使用している場合
クエリタイプは現在 キーレスエンティティ型 . 上記のように、クエリタイプはEF Core 2.1で導入されました。EF Core 3.0以上のバージョンを使用している場合、クエリタイプが廃止されたため、キーレスエンティティタイプを使用することを検討する必要があります。
<ブロッククオートこの機能はEF Core 2.1でクエリタイプという名前で追加されました。 EF Core 3.0では、このコンセプトはキーレスエンティティタイプに名前が変更されました。その EFCore 5.0では、[キーレス]データアノテーションが利用可能になりました。
キーレスエンティティタイプを使用する場合のシナリオは、クエリタイプの場合と同様です。
そのため、これを使用するには、まず自分のクラスをマークする必要があります。
SomeModel
で
[Keyless]
データアノテーション、または
.HasNoKey()
メソッドを呼び出すと、以下のようになります。
public DbSet<SomeModel> SomeModels { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeModel>().HasNoKey();
}
この設定後、説明した方法のいずれかを使用することができます。 ここで を使用してSQLクエリを実行します。例えば、このようなものがあります。
var result = context.SomeModels.FromSqlRaw("SQL SCRIPT").ToList();
var result = await context.SomeModels.FromSql("SQL_SCRIPT").ToListAsync();
関連
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] Entity Framework 5 レコードを更新する
-
[解決済み] Entity Frameworkにおける最速の挿入方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】Reflection - プロパティで属性名と値を取得する