藤本  結衣

藤本 結衣

1648778460

MVCとEntityFrameworkを使用したASP.NETWebAPIパート1

さまざまな分野のWebAPIの概念と、Asp.NetMVCおよびEntityFrameworkを使用したその実装。Web API Controllerは、EntityFrameworkによってSQLServerに接続します。Web APIルートは、IOTなどのさまざまなタイプのクライアントで使用できます。ASP.NET Web APIは、Web API、つまり.NETFramework上にHTTPベースのサービスを構築するためのフレームワークです。Web APIを使用する最も一般的な使用例は、RESTfulサービスを構築することです。これは、モノのインターネットの略であるIOTにとって大きな役割を果たします。

WEB APIは、HTTP / Restfulを使用してリソース指向のサービスを作成するのに最適であり、MVCベースのアプリケーションでうまく機能します。WEBAPIは、XMLを含む任意のテキスト形式を使用でき、WCFよりも高速です。 

説明

これらのWebAPIサービスは、以下のリストで使用できます。

  • ブラウザ
  • モバイルアプリケーション
  • デスクトップアプリケーション

クライアント/サーバー制約では、クライアントが要求を送信し、サーバーが応答を送信します。この関心の分離は、クライアント側のロジックとサーバー側のロジックの独立した進化をサポートします。ステートレス制約では、クライアントとサーバーはリクエスト間でステートレスである必要があります。これは、クライアントに関連するサーバーに何も保存してはならないことを意味します。クライアントからの要求には、サーバーがその要求を処理するために必要なすべての情報が含まれている必要があります。これにより、各リクエストをサーバーが個別に処理できるようになります。

キャッシュ可能制約では、クライアントはこのデータがどのくらいの期間有効であるかを知っているため、クライアントはそのデータのためにサーバーに何度も戻る必要はありません。統一インターフェースの場合各リクエストで送信されるGET、PUT、POST、DELETEなどのHTTP動詞は、APIにリソースの処理方法を指示します。各リソースは、UniformResourceIdentifierの略である特定のURIによって識別されます。

Asp.Net Web APIがWCFよりも高速なのはなぜですか?

WCFは、SOAPベースのサービスとバインディングを開発するために作成されました。WCFはSOAPベースであり、HTTP経由で標準のXMLスキーマを使用するため、パフォーマンスが低下する可能性があります。WEB APIは、よりシンプルで軽量なサービスに適しています。WEB APIは、XMLを含む任意のテキスト形式を使用でき、WCFよりも高速です。WEB APIはデータコントラクトを必要とせず、WCFレベルの構成も必要ありません。

参照

Entity Frameworkの詳細については、以下に記載されている私のプロファイルにアクセスしてください。

ソースコードへの道

従うべきステップ、

ステップ1

以下のスクリプトを使用して、Employee2という名前のテーブルを作成します。

SET ANSI_NULLS ON  
GO  
  
SET QUOTED_IDENTIFIER ON  
GO  
  
CREATE TABLE [dbo].[Employee2](  
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL,  
    [FirstName] [nvarchar](50) NOT NULL,  
    [LastName] [nvarchar](50) NOT NULL,  
    [EmailID] [nvarchar](200) NULL,  
    [City] [nvarchar](50) NULL,  
    [Country] [nvarchar](50) NULL,  
PRIMARY KEY CLUSTERED   
(  
    [EmployeeID] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY]  
  
GO 

次に、以下のスクリプトを使用して、そのテーブルにいくつかのダミーレコードを挿入します。 

GO  
SET IDENTITY_INSERT [dbo].[Employee2] ON   
  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (1, N'Satyaprakash', N'Samantaray', N'Satya@gmail.com', N'Bengaluru', N'India')  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (2, N'Satya', N'Saman', N'Satya.Saman@gmail.com', N'Bhubaneswar', N'India')  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (3, N'sa', N'sa', N's@gmail.com', N'bangalore', N'india')  
GO  
SET IDENTITY_INSERT [dbo].[Employee2] OFF  
GO 

ステップ2

「Satyadatabasemodel.edmx」という名前のエンティティデータモデルを追加します。そのモデル名の中に、エンティティ名「CrystalGranite2016Entities」を作成します。モデル内では、関連する変数を持つテーブルEmployee2のようなデータベースオブジェクトと同じEmployee2からEmployeeに名前を変更したため、クラスEmployee.csはすでに自動生成されています。

 

コード参照

namespace SatyaWebApi   
{   
    using System;   
    using System.Collections.Generic;   
       
    public partial class Employee   
    {   
        public int EmployeeID { get; set; }   
        public string FirstName { get; set; }   
        public string LastName { get; set; }   
        public string EmailID { get; set; }   
        public string City { get; set; }   
        public string Country { get; set; }   
    }   
}  

ステップ3

「SatyaController.cs」という名前の空のAPIコントローラを作成します。次に、データベースからデータをフェッチしてクライアントアプリケーションに戻るための新しいアクションをAPIコントローラーに追加しました。

コード参照

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Net;   
using System.Net.Http;   
using System.Web.Http;   
   
namespace SatyaWebApi.Controllers   
{   
    public class SatyaController : ApiController   
    {   
           
        public HttpResponseMessage Get()   
        {   
            List<Employee> allEmp = new List<Employee>();   
            using (CrystalGranite2016Entities dc = new CrystalGranite2016Entities())    
            {   
                allEmp = dc.Employees.OrderBy(a => a.FirstName).ToList();    
                HttpResponseMessage response;   
                response = Request.CreateResponse(HttpStatusCode.OK, allEmp);   
                return response;   
            }   
        }   
    }   
}  

コードの説明

インデックスでアクセスできるオブジェクトの強く型付けされたリストを追加しました。

List<Employee> allEmp = new List<Employee>(); 

ここで、データベースからデータをフェッチしてクライアントに戻るためのアクションを追加しました。

public HttpResponseMessage Get()   
{   
   //code here....   
} 

ここで、CrystalGranite2016EntitiesはDataContextです。

using (CrystalGranite2016Entities dc = new CrystalGranite2016Entities())    
{   
    //code here....   
} 

ここでは、データをフェッチするためのLinqコードを追加しました。

List<Employee> allEmp = new List<Employee>();        
allEmp = dc.Employees.OrderBy(a => a.FirstName).ToList();    

HttpResponseMessageは、http応答メッセージを表します。次に、関連付けられたHttpRequestMessageに接続されたHttpResponseMessageを作成します。HttpStatusCodeには、HTTP用に定義されたステータスコードの値が含まれています。これらすべてのクラスと列挙型は、名前空間の下に必要です。  

using System.Net;   
using System.Net.Http;   
using System.Web.Http; 

ステップ4

次に、エンティティデータモデル(.edmxファイル)の作成中に自動生成されるweb.configファイル内のconnectionstringを確認します。

<connectionStrings>   
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-SatyaWebApi-20180326100928.mdf;Initial Catalog=aspnet-SatyaWebApi-20180326100928;Integrated Security=True" providerName="System.Data.SqlClient" />   
    <add name="CrystalGranite2016Entities" connectionString="metadata=res://*/Satyadatabasemodel.csdl|res://*/Satyadatabasemodel.ssdl|res://*/Satyadatabasemodel.msl;provider=System.Data.SqlClient;provider connection string="data source=SODN-PAVILION\SQLEXPRESS;initial catalog=CrystalGranite2016;user id=sa;password=satya;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />   
  </connectionStrings> 

ステップ5

Referenceフォルダーを確認し、2つのアセンブリ(.Dllファイル)がエンティティフレームワーク関連情報に関連していることを確認します。

  • EntityFramework
  • EntityFramework.SqlServer

ステップ

6WebApiConfig.csをチェックして、XML形式のレコードを取得するためのWebAPIルートまたはWEBAPIのURLパスを見つけます。

コード参照

config.Routes.MapHttpRoute(
   name: "DefaultApi",  
   routeTemplate: "api/{controller}/{id}",  
   defaults: new { id = RouteParameter.Optional }  
);  

コードの説明

ここで、パスはhttp:// site_name / api/API_Controller_Nameである必要があります。

出力

WebAPIルートは次のとおりです。http:// localhost:47250 / api / satya。ここで、satyaはAPIコントローラー名の名前です。ブラウザですべてのレコードをXML形式で取得しました。

WEB APIは、WCFやWebサービス 

WCFよりも優れた選択肢です。

  1. WCFは、複数のトランスポートプロトコル(HTTP、HTTPS、名前付きパイプ、MSMQ、TCP、UDP、およびカスタムトランスポート)をサポートし、それらを切り替えることができます。
  2. WCFはMVC機能をサポートしていません
     
  3. WCFサービスの拡張子は.svcです。
  4. WCFは、XML、JSON、およびATOMデータ形式をサポートします。
  5. WCFは、要求/応答、一方向、および二重メッセージ交換パターンをサポートします。
  6. WCFは、あるエンドポイントサービスから別のサービスにデータを非同期で送信します
  7. WCFは、アプリケーション内、IIS上、またはウィンドウサービスを使用してホストできます。
  8. WCFは、XmlSerializerと比較してパフォーマンスが優れているDataContractSerializerを使用します。
  9. アプリケーション内、IIS上、またはウィンドウサービスを使用してホストできます。
  10. コンテンツ形式はSOAP+XMLです。
  11. そのサービスインターフェースはサービスコントラクトです。
  12. 状態管理は、呼び出しごとにステートレスです。
  13. キャッシングメカニズムはアプリケーションによって処理されます。
  14. エラー処理タイプ障害、動作。
  15. タイプはオプトインです。

Asp.Net Web API

  1. ASP。NET Web APIは、HTTPサービスを使用するフレームワークであり、クライアント要求への応答を簡単に提供できるようにします。
  2. Web APIは、拡張子が.cs(C#)の単純なクラスファイルです。
  3. Web APIは、アプリケーション内またはIISでホストできます
  4. これはオープンソースであり、XMLまたはJSONを理解するすべてのクライアントが使用できます。
  5. ルーティング、コントローラー、アクション結果、モデルバインダー、IOCコンテナーまたは依存性注入、ユニットテストなどのMVC機能をサポートし、よりシンプルで堅牢になります。
  6. HTTPは要求/応答ですが、SignalRandWebSocketの統合によって追加のパターンをサポートできます。
  7. Web APIの軽量アーキテクチャであり、スマートフォンのように帯域幅が制限されているデバイスに適しています。
  8. コンテンツ形式は任意のメディア形式です。
  9. そのサービスインターフェイスは、URLパターン、HTTPメソッドです。
  10. 状態管理はステートレスです。
  11. キャッシングメカニズムは、HTTPPreferアプリケーション制御に組み込まれています。
  12. エラー処理タイプのHTTPステータスコードフィルター、例外。
  13. タイプはオプトアウトです。

ウェブサービス

  1. WebサービスはSOAPに基づいており、XML形式でのみデータを返します。
  2. SOAP(Simple Object Access Protocol)は、独自のセキュリティを定義します。
  3. Webサービスの拡張子は.asmxです。
  4. WebサービスはHTTPプロトコルのみをサポートします
  5. WebサービスはMVC機能をサポートしていません
  6. IISでのみホストできます。

まとめ

  • Asp.NetWebAPIとは何ですか。
  • EntityFrameworkとMVCを使用して実装する方法。
  • リアルタイムシナリオでのWebAPI。
  • Asp.NetWebAPIの利点。

ソース:https ://www.c-sharpcorner.com/article/web-api-using-asp-net-mvc-and-entity-framework-part-1/ 

#aspdotnet #mvc #entityframework 

What is GEEK

Buddha Community

MVCとEntityFrameworkを使用したASP.NETWebAPIパート1
藤本  結衣

藤本 結衣

1648778460

MVCとEntityFrameworkを使用したASP.NETWebAPIパート1

さまざまな分野のWebAPIの概念と、Asp.NetMVCおよびEntityFrameworkを使用したその実装。Web API Controllerは、EntityFrameworkによってSQLServerに接続します。Web APIルートは、IOTなどのさまざまなタイプのクライアントで使用できます。ASP.NET Web APIは、Web API、つまり.NETFramework上にHTTPベースのサービスを構築するためのフレームワークです。Web APIを使用する最も一般的な使用例は、RESTfulサービスを構築することです。これは、モノのインターネットの略であるIOTにとって大きな役割を果たします。

WEB APIは、HTTP / Restfulを使用してリソース指向のサービスを作成するのに最適であり、MVCベースのアプリケーションでうまく機能します。WEBAPIは、XMLを含む任意のテキスト形式を使用でき、WCFよりも高速です。 

説明

これらのWebAPIサービスは、以下のリストで使用できます。

  • ブラウザ
  • モバイルアプリケーション
  • デスクトップアプリケーション

クライアント/サーバー制約では、クライアントが要求を送信し、サーバーが応答を送信します。この関心の分離は、クライアント側のロジックとサーバー側のロジックの独立した進化をサポートします。ステートレス制約では、クライアントとサーバーはリクエスト間でステートレスである必要があります。これは、クライアントに関連するサーバーに何も保存してはならないことを意味します。クライアントからの要求には、サーバーがその要求を処理するために必要なすべての情報が含まれている必要があります。これにより、各リクエストをサーバーが個別に処理できるようになります。

キャッシュ可能制約では、クライアントはこのデータがどのくらいの期間有効であるかを知っているため、クライアントはそのデータのためにサーバーに何度も戻る必要はありません。統一インターフェースの場合各リクエストで送信されるGET、PUT、POST、DELETEなどのHTTP動詞は、APIにリソースの処理方法を指示します。各リソースは、UniformResourceIdentifierの略である特定のURIによって識別されます。

Asp.Net Web APIがWCFよりも高速なのはなぜですか?

WCFは、SOAPベースのサービスとバインディングを開発するために作成されました。WCFはSOAPベースであり、HTTP経由で標準のXMLスキーマを使用するため、パフォーマンスが低下する可能性があります。WEB APIは、よりシンプルで軽量なサービスに適しています。WEB APIは、XMLを含む任意のテキスト形式を使用でき、WCFよりも高速です。WEB APIはデータコントラクトを必要とせず、WCFレベルの構成も必要ありません。

参照

Entity Frameworkの詳細については、以下に記載されている私のプロファイルにアクセスしてください。

ソースコードへの道

従うべきステップ、

ステップ1

以下のスクリプトを使用して、Employee2という名前のテーブルを作成します。

SET ANSI_NULLS ON  
GO  
  
SET QUOTED_IDENTIFIER ON  
GO  
  
CREATE TABLE [dbo].[Employee2](  
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL,  
    [FirstName] [nvarchar](50) NOT NULL,  
    [LastName] [nvarchar](50) NOT NULL,  
    [EmailID] [nvarchar](200) NULL,  
    [City] [nvarchar](50) NULL,  
    [Country] [nvarchar](50) NULL,  
PRIMARY KEY CLUSTERED   
(  
    [EmployeeID] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY]  
  
GO 

次に、以下のスクリプトを使用して、そのテーブルにいくつかのダミーレコードを挿入します。 

GO  
SET IDENTITY_INSERT [dbo].[Employee2] ON   
  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (1, N'Satyaprakash', N'Samantaray', N'Satya@gmail.com', N'Bengaluru', N'India')  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (2, N'Satya', N'Saman', N'Satya.Saman@gmail.com', N'Bhubaneswar', N'India')  
GO  
INSERT [dbo].[Employee2] ([EmployeeID], [FirstName], [LastName], [EmailID], [City], [Country]) VALUES (3, N'sa', N'sa', N's@gmail.com', N'bangalore', N'india')  
GO  
SET IDENTITY_INSERT [dbo].[Employee2] OFF  
GO 

ステップ2

「Satyadatabasemodel.edmx」という名前のエンティティデータモデルを追加します。そのモデル名の中に、エンティティ名「CrystalGranite2016Entities」を作成します。モデル内では、関連する変数を持つテーブルEmployee2のようなデータベースオブジェクトと同じEmployee2からEmployeeに名前を変更したため、クラスEmployee.csはすでに自動生成されています。

 

コード参照

namespace SatyaWebApi   
{   
    using System;   
    using System.Collections.Generic;   
       
    public partial class Employee   
    {   
        public int EmployeeID { get; set; }   
        public string FirstName { get; set; }   
        public string LastName { get; set; }   
        public string EmailID { get; set; }   
        public string City { get; set; }   
        public string Country { get; set; }   
    }   
}  

ステップ3

「SatyaController.cs」という名前の空のAPIコントローラを作成します。次に、データベースからデータをフェッチしてクライアントアプリケーションに戻るための新しいアクションをAPIコントローラーに追加しました。

コード参照

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Net;   
using System.Net.Http;   
using System.Web.Http;   
   
namespace SatyaWebApi.Controllers   
{   
    public class SatyaController : ApiController   
    {   
           
        public HttpResponseMessage Get()   
        {   
            List<Employee> allEmp = new List<Employee>();   
            using (CrystalGranite2016Entities dc = new CrystalGranite2016Entities())    
            {   
                allEmp = dc.Employees.OrderBy(a => a.FirstName).ToList();    
                HttpResponseMessage response;   
                response = Request.CreateResponse(HttpStatusCode.OK, allEmp);   
                return response;   
            }   
        }   
    }   
}  

コードの説明

インデックスでアクセスできるオブジェクトの強く型付けされたリストを追加しました。

List<Employee> allEmp = new List<Employee>(); 

ここで、データベースからデータをフェッチしてクライアントに戻るためのアクションを追加しました。

public HttpResponseMessage Get()   
{   
   //code here....   
} 

ここで、CrystalGranite2016EntitiesはDataContextです。

using (CrystalGranite2016Entities dc = new CrystalGranite2016Entities())    
{   
    //code here....   
} 

ここでは、データをフェッチするためのLinqコードを追加しました。

List<Employee> allEmp = new List<Employee>();        
allEmp = dc.Employees.OrderBy(a => a.FirstName).ToList();    

HttpResponseMessageは、http応答メッセージを表します。次に、関連付けられたHttpRequestMessageに接続されたHttpResponseMessageを作成します。HttpStatusCodeには、HTTP用に定義されたステータスコードの値が含まれています。これらすべてのクラスと列挙型は、名前空間の下に必要です。  

using System.Net;   
using System.Net.Http;   
using System.Web.Http; 

ステップ4

次に、エンティティデータモデル(.edmxファイル)の作成中に自動生成されるweb.configファイル内のconnectionstringを確認します。

<connectionStrings>   
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-SatyaWebApi-20180326100928.mdf;Initial Catalog=aspnet-SatyaWebApi-20180326100928;Integrated Security=True" providerName="System.Data.SqlClient" />   
    <add name="CrystalGranite2016Entities" connectionString="metadata=res://*/Satyadatabasemodel.csdl|res://*/Satyadatabasemodel.ssdl|res://*/Satyadatabasemodel.msl;provider=System.Data.SqlClient;provider connection string="data source=SODN-PAVILION\SQLEXPRESS;initial catalog=CrystalGranite2016;user id=sa;password=satya;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />   
  </connectionStrings> 

ステップ5

Referenceフォルダーを確認し、2つのアセンブリ(.Dllファイル)がエンティティフレームワーク関連情報に関連していることを確認します。

  • EntityFramework
  • EntityFramework.SqlServer

ステップ

6WebApiConfig.csをチェックして、XML形式のレコードを取得するためのWebAPIルートまたはWEBAPIのURLパスを見つけます。

コード参照

config.Routes.MapHttpRoute(
   name: "DefaultApi",  
   routeTemplate: "api/{controller}/{id}",  
   defaults: new { id = RouteParameter.Optional }  
);  

コードの説明

ここで、パスはhttp:// site_name / api/API_Controller_Nameである必要があります。

出力

WebAPIルートは次のとおりです。http:// localhost:47250 / api / satya。ここで、satyaはAPIコントローラー名の名前です。ブラウザですべてのレコードをXML形式で取得しました。

WEB APIは、WCFやWebサービス 

WCFよりも優れた選択肢です。

  1. WCFは、複数のトランスポートプロトコル(HTTP、HTTPS、名前付きパイプ、MSMQ、TCP、UDP、およびカスタムトランスポート)をサポートし、それらを切り替えることができます。
  2. WCFはMVC機能をサポートしていません
     
  3. WCFサービスの拡張子は.svcです。
  4. WCFは、XML、JSON、およびATOMデータ形式をサポートします。
  5. WCFは、要求/応答、一方向、および二重メッセージ交換パターンをサポートします。
  6. WCFは、あるエンドポイントサービスから別のサービスにデータを非同期で送信します
  7. WCFは、アプリケーション内、IIS上、またはウィンドウサービスを使用してホストできます。
  8. WCFは、XmlSerializerと比較してパフォーマンスが優れているDataContractSerializerを使用します。
  9. アプリケーション内、IIS上、またはウィンドウサービスを使用してホストできます。
  10. コンテンツ形式はSOAP+XMLです。
  11. そのサービスインターフェースはサービスコントラクトです。
  12. 状態管理は、呼び出しごとにステートレスです。
  13. キャッシングメカニズムはアプリケーションによって処理されます。
  14. エラー処理タイプ障害、動作。
  15. タイプはオプトインです。

Asp.Net Web API

  1. ASP。NET Web APIは、HTTPサービスを使用するフレームワークであり、クライアント要求への応答を簡単に提供できるようにします。
  2. Web APIは、拡張子が.cs(C#)の単純なクラスファイルです。
  3. Web APIは、アプリケーション内またはIISでホストできます
  4. これはオープンソースであり、XMLまたはJSONを理解するすべてのクライアントが使用できます。
  5. ルーティング、コントローラー、アクション結果、モデルバインダー、IOCコンテナーまたは依存性注入、ユニットテストなどのMVC機能をサポートし、よりシンプルで堅牢になります。
  6. HTTPは要求/応答ですが、SignalRandWebSocketの統合によって追加のパターンをサポートできます。
  7. Web APIの軽量アーキテクチャであり、スマートフォンのように帯域幅が制限されているデバイスに適しています。
  8. コンテンツ形式は任意のメディア形式です。
  9. そのサービスインターフェイスは、URLパターン、HTTPメソッドです。
  10. 状態管理はステートレスです。
  11. キャッシングメカニズムは、HTTPPreferアプリケーション制御に組み込まれています。
  12. エラー処理タイプのHTTPステータスコードフィルター、例外。
  13. タイプはオプトアウトです。

ウェブサービス

  1. WebサービスはSOAPに基づいており、XML形式でのみデータを返します。
  2. SOAP(Simple Object Access Protocol)は、独自のセキュリティを定義します。
  3. Webサービスの拡張子は.asmxです。
  4. WebサービスはHTTPプロトコルのみをサポートします
  5. WebサービスはMVC機能をサポートしていません
  6. IISでのみホストできます。

まとめ

  • Asp.NetWebAPIとは何ですか。
  • EntityFrameworkとMVCを使用して実装する方法。
  • リアルタイムシナリオでのWebAPI。
  • Asp.NetWebAPIの利点。

ソース:https ://www.c-sharpcorner.com/article/web-api-using-asp-net-mvc-and-entity-framework-part-1/ 

#aspdotnet #mvc #entityframework