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

  • 質問

  • フォーラムに初めて投稿いたします。どなたかお分かりの方がおられましたら、助けてください。よろしくお願いいたします。

    現在、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で、データベースファーストの設定方法をご存知の方がおられましたら、どうぞ教えてください。

    よろしくお願いいたします。

    2020年8月8日 11:23

回答

すべての返信

  • 以下の記事が参考になると思います。

    スキャフォールディング機能 (CORE)
    http://surferonwww.info/BlogEngine/post/2020/03/16/create-controller-and-view-in-aspnet-core-mvc-using-scaffolding.aspx

    2020年8月8日 11:44
  • 求めに応じて回答したのですから、それに対するフィードバックをしてください。役に立った・立たなかったぐらいはすぐ返せるのでは? 無言は NG です。
    2020年8月11日 0:32
  • 南太平洋の楽園さん、こんにちは。フォーラムオペレーターの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までお気軽にお問い合わせください。~


    2020年8月12日 6:09
    モデレータ
  • > Database First ストラテジーを使用してプロジェクトを開発したい場合は、次のドキュメントを参照することをお勧めします:

    ASP.NET CoreでのEntity Framework Coreを使用したRazorページ

    そのチートリアルは Code First だと思いますけど? 前にもお願いしましたが MSFT とかの看板を掲げて発言するなら十二分に内容に間違いがないことを確認していただきたいのですが・・・

    2020年8月12日 7:13
  • SurferOnWwwさん
    ご指摘いただきありがとうございます。

    申し訳ございませんが、リンクを間違えてしまいました。
    今後きっと気を付けます。よろしくお願いいたします。

    南太平洋の楽園さん

    リンクの内容を編集しましたが、ご参照のほどお願いします。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。


    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年8月12日 8:31
    モデレータ
  • あれから約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);


    ではどうして、ストアドプロシージャにそんなにこだわるのか。
    それは主にデータ取得時に、ストアドプロシージャの中で、テーブル値関数やスカラー値関数を駆使して、木目細かいデータ取得ができることに魅力を感じているからです。

    ありがとうございました。よろしくお願いいたします。

    2020年9月3日 7:02
  • 1 か月近く放置してい置いて何をいまさらって感じですね。

    とにかく、これ以上放置しないで、役に立った回答にマークを付けて、このスレッドはクローズしてください。

    2020年9月3日 9:14