トップ回答者
ASP.NET Coreで、データベースファーストによるデータベースアクセスの設定方法を教えてください。

質問
-
フォーラムに初めて投稿いたします。どなたかお分かりの方がおられましたら、助けてください。よろしくお願いいたします。
現在、8月中にASP.NETからASP.NET Coreへ移行する準備を進めております。
移行に当たり、障害になりますのがデータベースアクセスの問題です。古い頭の人間ですので、Entity Framework Coreによるコードファーストがよく理解できません。
ASP.NETのときは、ADO.NETが利用できましたので、データベースファーストでのアクセスが実現できておりました。
ASP.NET Coreには、ADO.NETがありません。NuGetパッケージ管理からインストールしようとしましたが、どうもうまくいきません。
Dino Esposito著の「プログラミング ASP.NET Core」には、ASP.NET Core2.0では、ASP.NET APIのコンポーネントが一部復活している記述があります。
ASP.NET Coreで、データベースファーストの設定方法をご存知の方がおられましたら、どうぞ教えてください。
よろしくお願いいたします。
回答
すべての返信
-
南太平洋の楽園さん、こんにちは。フォーラムオペレーターのKumoです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
実際、ADO.NETはASP.NET CoreとASP.NETで引き続き機能しています。
ASP.NET CoreフレームワークのEntity Framework Core(EF Core)に置き換えられたEntity Framework(EF)について話しているかもしれません。
Database First ストラテジーを使用してプロジェクトを開発したい場合は、次のドキュメントを参照することをお勧めします:
Creating a Model for an Existing Database in Entity Framework Core(英語となりますが)
ASP.NETはASP.NET Coreとは異なることを覚えておいてください。
データベースアクセスには、2つの異なるオブジェクト―データベース マッパーがあります。
ASP.NETのEFとASP.NET CoreのEF Coreです。どちらのフレームワークもADO.NET上に構築されています。
どうぞよろしくお願いいたします。
MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
- 編集済み kumo-msftMicrosoft contingent staff, Moderator 2020年8月12日 8:29 リンクを間違えた、編集済み
-
> Database First ストラテジーを使用してプロジェクトを開発したい場合は、次のドキュメントを参照することをお勧めします:
> ASP.NET CoreでのEntity Framework Coreを使用したRazorページ
そのチートリアルは Code First だと思いますけど? 前にもお願いしましたが MSFT とかの看板を掲げて発言するなら十二分に内容に間違いがないことを確認していただきたいのですが・・・
-
SurferOnWwwさん
ご指摘いただきありがとうございます。
申し訳ございませんが、リンクを間違えてしまいました。
今後きっと気を付けます。よろしくお願いいたします。
南太平洋の楽園さん
リンクの内容を編集しましたが、ご参照のほどお願いします。
お手数ですが、ご協力の程どうかよろしくお願いいたします。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
-
あれから約1ヶ月経過しようとしています。その節は大変失礼いたしました。
8/8にすぐ、貴重な資料を送っていただき、ありがとうございました。
大変役に立ちました。さて、本題に入らせていただきます。
Core以前のASP.NETでは、データアクセスにADO.NET Entity Data Modelが使用できたため、ストアドプロシージャを使用したDatabase-Firstが実現できました。しかし、Coreからはそれはできません。それで、約1ヶ月間、いろいろ探し、テストしてきました。
そこで見つけたのが、データ取得時に使用するFromSqlRawメソッドと、データ更新時に使用するExecuteSqlRawメソッドです。以下にそれを使用した簡単なサンプルを提示します。(MVCではなくRazorPagesで書いています。MVCでも動くと思います。)
■ストアドプロシージャ データ取得時サンプル
public IList<Shohin1Gyo> Shohin1Gyo { get; set; }
public async Task OnGetAsync(string shohincode)
{
Shohin1Gyo = await _context.Shohin1Gyo.FromSqlRaw("EXECUTE dbo.ksp_ND_get1Gyo {0}", shohincode).ToListAsync();
}
■ストアドプロシージャ 更新時サンプルpublic Person Person { get; set; }
・
・
・int id = 2; // インサート時は自動取得
string name = "鈴木 一郎";
string mail = "suzuki@test.ne.jp";
int age = 51;1)インサート
_context.Database.ExecuteSqlRaw("dbo.ksp_Person_Insert {0}, {1}, {2}", name, mail, age);
2)アップデイト
_context.Database.ExecuteSqlRaw("dbo.ksp_Person_Update {0}, {1}, {2}, {3}", id, name, mail, age);
3)デリート
_context.Database.ExecuteSqlRaw("dbo.ksp_Person_Delete {0}", id);
ではどうして、ストアドプロシージャにそんなにこだわるのか。
それは主にデータ取得時に、ストアドプロシージャの中で、テーブル値関数やスカラー値関数を駆使して、木目細かいデータ取得ができることに魅力を感じているからです。ありがとうございました。よろしくお願いいたします。