伊藤  直子

伊藤 直子

1648044780

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

この記事は、前回の記事「  .NET6を使用したクリーンアーキテクチャ」の続きです。前回の記事では、クリーンなアーキテクチャ、原則、および設計上の考慮事項について詳しく説明しました。さらに、.NET6とASP.NETWebAPIを使用して完全なクリーンアーキテクチャソリューションを作成しました。

クリーンなアーキテクチャについて知るため  に、私が以下の点を解明したこの記事をチェックしてください。

  • クリーンアーキテクチャとは
  • クリーンアーキテクチャの基本原則
  • クリーンなアーキテクチャ図
  • クリーンなアーキテクチャのレイヤー
  • デザインサンプル

さらに、  .NET6とASP.NETCoreWebAPIを使用してクリーンなアーキテクチャソリューションを設計しました。

  • .NET6を使用してクリーンなアーキテクチャを設計する
  • クリーンアーキテクチャを使用したASP.NETコアWebAPI

この記事の範囲は、.NET6およびASP.NETコアWebAPIを使用してCleanArchitectureにEntityFrameworkを実装することです。

  • .NET6を使用したCleanArchitectureSolutionにEntityFrameworkを実装する
  • ビジネスケースを実装する
  • CRUD操作を使用してASP.NETCoreWebAPIを設計する

.NET 6で示すように、クリーンなアーキテクチャソリューションを作成しました。

  • ドメインライブラリへの参照はありません
  • アプリケーション:ドメインプロジェクトの参照を追加
  • インフラストラクチャ:アプリケーションプロジェクトの参照を追加
  • WebApi:アプリケーションおよびインフラストラクチャプロジェクトの参照を追加します

ビジネスケースを実装しましょう。

SMTPの詳細、アプリケーションデータなど、いくつかのアプリケーション変数と構成を保存できるアプリケーション設定を作成します。

したがって、エンティティはクリーンなアーキテクチャの中心にあります。エンティティの作成から始めます。図のように、ドメインライブラリにエンティティAppSettingを作成します。

図のように、共通フォルダーの下にIdプロパティを持つベースエンティティを追加しましょう。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

この BaseEntity抽象クラスにすべての共通プロパティを保持します。 その理由は、それをすべてのエンティティで再利用するためです。 

BaseEntity.cs

namespace Domain.Common{    public abstract class BaseEntity<T>    {        public virtual T Id { get; set; }    }}

C#

他のいくつかのプロパティを含めることもできますが、簡単にするために、IDのみを保持しています。

Tタイプを使用すると、Idを動的にするオプションが提供されます。たとえば、テーブルの要件に基づいて、Idをint、bigInt、またはGuidとして保持する場合があります。

次に、 MasterフォルダーにAppSetting エンティティを作成し ます。ユースケースに基づいてエンティティをグループ化し、関連するフォルダの下に保持することをお勧めします。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

AppSetting.cs

global using Domain.Common;namespace Domain.Master{    public class AppSetting : BaseEntity<int>    {        /// <summary>        /// Gets or sets the ReferenceKey        /// </summary>        public string ReferenceKey { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Value        /// </summary>        public string Value { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Description        /// </summary>        public string Description { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Type        /// </summary>        public string Type { get; set; } = String.Empty;    }}

C#

ここでは、基本エンティティを継承しているため、Idプロパティを追加する必要はなく、intタイプのIdを宣言しています。

さらに、   .NET 6 の機能であるグローバル使用を使用した ため、他のエンティティにベースエンティティの参照を追加する必要はありません。

アプリケーションライブラリに移動してみましょう。このライブラリには、サービス、インターフェイス、ドメイン検証、エラー処理などのすべてのビジネスロジックが含まれています。この記述の範囲を制限するために、このアプリケーションライブラリの下にのみアプリケーションコンテキストとサービスのインターフェイスを追加します。 

クリーンアーキテクチャでのEntityFrameworkの実装

ソリューションにエンティティフレームワークを実装しましょう。MSSQLサーバーでエンティティフレームワークを使用します。以下のパッケージをそれぞれのライブラリとプロジェクトに追加する必要があります。

アプリケーションライブラリのパッケージ 。

Microsoft.EntityFramework.Core

Microsoft.Extensions.DependencyInjection.Abstractions

Newtonsoft.Json

インフラストラクチャ ライブラリのパッケージ 。

Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

Microsoft.Extensions.DependencyInjection.Abstractions

WebAPIのパッケージ 

Microsoft.EntityFrameworkCore.Design

これらのパッケージは、以下に示すように、コマンドまたはGUIからそれぞれのプロジェクトにインストールできます。 

Install-Package Microsoft.EntityFramework.Core -ProjectName Application

JavaScript

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

同様に、他のパッケージをインストールすることもできます。

次に、以下に示すように、共通フォルダーの下のアプリケーションプロジェクトにアプリケーションコンテキストのインターフェイスを作成します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

IApplicationDBContext.cs

using Domain.Master;using Microsoft.EntityFrameworkCore;namespace Application.Common.Interfaces{    public interface IApplicationDBContext    {        DbSet<AppSetting> AppSettings { get; set; }        Task<int> SaveChangesAsync();    }}

C#

クリーンなアーキテクチャの原則に従って、ビジネスロジック(アプリケーション)コア部分にアプリケーションコンテキストのインターフェイスを追加しますが、外部エージェントをコアロジックの外に置きたいため、データベースに基づいてインフラストラクチャに実装します。上記のインターフェースの実装となるアプリケーションコンテキストを作成してみましょう。

ここでも、示されているようにプロジェクトを編成し、アプリケーションコンテキストクラスを作成します。

 以下に示すように、persistenceフォルダーの下に クラス AppicationDBContextを作成し、 DBContext と IApplicationDBContext を継承します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

AppSetting の DbSet と SaveChangesAsyncを追加することで、 IApplicationDBContext インターフェイス を実装でき ます。

ApplicationDBContext.cs

using Application.Common.Interfaces;using Domain.Master;using Microsoft.EntityFrameworkCore;namespace Infrastructure.Persistence{    public class ApplicationDBContext : DbContext, IApplicationDBContext    {        #region Ctor        public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options)         : base(options)        {        }        #endregion        #region DbSet        public DbSet<AppSetting> AppSettings { get; set; }        #endregion        #region Methods        public Task<int> SaveChangesAsync()        {            return base.SaveChangesAsync();        }        #endregion    }}

C#

次に、図のようにインフラストラクチャライブラリに依存性注入クラスを追加します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

クラスについて詳しく説明します。

services.AddDbContext<ApplicationDBContext>(options =>                options.UseSqlServer(configuration.GetConnectionString("RijsatDatabase"),                b => b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName)), ServiceLifetime.Transient);

C#

接続文字列を証明するために上記を追加し、MSSQLServerを使用しています。接続文字列をWebAPIホストのAppSetting.csに挿入するため、  ICongifuration を使用してこの値を取得してい  ます。

services.AddScoped<IApplicationDBContext>(provider => provider.GetService<ApplicationDBContext>());

C#

これは、 ApplicationDBContext.csへ のIApplicationDBContext のプロバイダー、  つまり依存性注入です。

DependencyInjection.cs

using Application.Common.Interfaces;using Infrastructure.Persistence;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;namespace Infrastructure{    public static class DependencyInjection    {        public static IServiceCollection AddPersistence(this IServiceCollection services,            IConfiguration configuration)        {            services.AddDbContext<ApplicationDBContext>(options =>                options.UseSqlServer(configuration.GetConnectionString("RijsatDatabase"),                b => b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName)), ServiceLifetime.Transient);            services.AddScoped<IApplicationDBContext>(provider => provider.GetService<ApplicationDBContext>());            return services;        }    }}

C#

 以下に示すように、WebAPIホストプロジェクトのAppSetting.jsonに接続文字列を追加する必要があり ます。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

データベースに従って接続文字列を指定します。

"ConnectionStrings": {    "RijsatDatabase": "Data Source=rijwan7475001;Initial Catalog=RijsatDb;Integrated Security=True;Connect Timeout=60;TrustServerCertificate=True"  }

JavaScript

さらに、示されているように、 program.cs  (スタートアップ)ファイルのサービス呼び出しに依存性注入のエントリを作成する必要があり ます。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

アプリビルダーの前に、 IServiceCollection の下にサービスのエントリを作成し ます。

//Dependency Injectionbuilder.Services.AddPersistence(builder.Configuration);

C#

.NET6を使用したCleanArchitectureでのEntityFrameworkの実装の準備が整いました。

パッケージマネージャーコンソールで移行コマンドを実行してみましょう。

Add-Migration "DB Initialize"

C#

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

インフラストラクチャプロジェクトをデフォルトとして選択し 、  WebAPIをスタートアッププロジェクトとして選択していることを確認してください 。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

Update-Database

ベーシック

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

ソリューションにEntityFrameworkを正常に実装しました。データベースは期待どおりに作成されます。

この記事では、.N  ET6とASP.NETCoreWebAPIを使用してCleanArchitectureにエンティティフレームワークを正常に実装しました。

次の記事では、完全なCRUD操作を実行し、Web APIを構築し、Swaggerでテストします。

結論

この記事では、.NET6とASP.NetコアWebAPIを使用してクリーンなアーキテクチャでエンティティフレームワークを実装する方法を段階的に説明しました。さらに、EFデータベース移行コマンドを使用してモデルを作成し、データベースを作成しました。次の記事では、.NET6を使用したCleanArchitectureでエンティティフレームワークを使用したCRUD操作について説明します。

ソース:https ://www.c-sharpcorner.com/article/clean-architecture-with-net-6-using-entity-framework/

#dotnet  #entity-framework  

What is GEEK

Buddha Community

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ
伊藤  直子

伊藤 直子

1648044780

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

この記事は、前回の記事「  .NET6を使用したクリーンアーキテクチャ」の続きです。前回の記事では、クリーンなアーキテクチャ、原則、および設計上の考慮事項について詳しく説明しました。さらに、.NET6とASP.NETWebAPIを使用して完全なクリーンアーキテクチャソリューションを作成しました。

クリーンなアーキテクチャについて知るため  に、私が以下の点を解明したこの記事をチェックしてください。

  • クリーンアーキテクチャとは
  • クリーンアーキテクチャの基本原則
  • クリーンなアーキテクチャ図
  • クリーンなアーキテクチャのレイヤー
  • デザインサンプル

さらに、  .NET6とASP.NETCoreWebAPIを使用してクリーンなアーキテクチャソリューションを設計しました。

  • .NET6を使用してクリーンなアーキテクチャを設計する
  • クリーンアーキテクチャを使用したASP.NETコアWebAPI

この記事の範囲は、.NET6およびASP.NETコアWebAPIを使用してCleanArchitectureにEntityFrameworkを実装することです。

  • .NET6を使用したCleanArchitectureSolutionにEntityFrameworkを実装する
  • ビジネスケースを実装する
  • CRUD操作を使用してASP.NETCoreWebAPIを設計する

.NET 6で示すように、クリーンなアーキテクチャソリューションを作成しました。

  • ドメインライブラリへの参照はありません
  • アプリケーション:ドメインプロジェクトの参照を追加
  • インフラストラクチャ:アプリケーションプロジェクトの参照を追加
  • WebApi:アプリケーションおよびインフラストラクチャプロジェクトの参照を追加します

ビジネスケースを実装しましょう。

SMTPの詳細、アプリケーションデータなど、いくつかのアプリケーション変数と構成を保存できるアプリケーション設定を作成します。

したがって、エンティティはクリーンなアーキテクチャの中心にあります。エンティティの作成から始めます。図のように、ドメインライブラリにエンティティAppSettingを作成します。

図のように、共通フォルダーの下にIdプロパティを持つベースエンティティを追加しましょう。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

この BaseEntity抽象クラスにすべての共通プロパティを保持します。 その理由は、それをすべてのエンティティで再利用するためです。 

BaseEntity.cs

namespace Domain.Common{    public abstract class BaseEntity<T>    {        public virtual T Id { get; set; }    }}

C#

他のいくつかのプロパティを含めることもできますが、簡単にするために、IDのみを保持しています。

Tタイプを使用すると、Idを動的にするオプションが提供されます。たとえば、テーブルの要件に基づいて、Idをint、bigInt、またはGuidとして保持する場合があります。

次に、 MasterフォルダーにAppSetting エンティティを作成し ます。ユースケースに基づいてエンティティをグループ化し、関連するフォルダの下に保持することをお勧めします。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

AppSetting.cs

global using Domain.Common;namespace Domain.Master{    public class AppSetting : BaseEntity<int>    {        /// <summary>        /// Gets or sets the ReferenceKey        /// </summary>        public string ReferenceKey { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Value        /// </summary>        public string Value { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Description        /// </summary>        public string Description { get; set; } = String.Empty;        /// <summary>        /// Gets or sets the Type        /// </summary>        public string Type { get; set; } = String.Empty;    }}

C#

ここでは、基本エンティティを継承しているため、Idプロパティを追加する必要はなく、intタイプのIdを宣言しています。

さらに、   .NET 6 の機能であるグローバル使用を使用した ため、他のエンティティにベースエンティティの参照を追加する必要はありません。

アプリケーションライブラリに移動してみましょう。このライブラリには、サービス、インターフェイス、ドメイン検証、エラー処理などのすべてのビジネスロジックが含まれています。この記述の範囲を制限するために、このアプリケーションライブラリの下にのみアプリケーションコンテキストとサービスのインターフェイスを追加します。 

クリーンアーキテクチャでのEntityFrameworkの実装

ソリューションにエンティティフレームワークを実装しましょう。MSSQLサーバーでエンティティフレームワークを使用します。以下のパッケージをそれぞれのライブラリとプロジェクトに追加する必要があります。

アプリケーションライブラリのパッケージ 。

Microsoft.EntityFramework.Core

Microsoft.Extensions.DependencyInjection.Abstractions

Newtonsoft.Json

インフラストラクチャ ライブラリのパッケージ 。

Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

Microsoft.Extensions.DependencyInjection.Abstractions

WebAPIのパッケージ 

Microsoft.EntityFrameworkCore.Design

これらのパッケージは、以下に示すように、コマンドまたはGUIからそれぞれのプロジェクトにインストールできます。 

Install-Package Microsoft.EntityFramework.Core -ProjectName Application

JavaScript

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

同様に、他のパッケージをインストールすることもできます。

次に、以下に示すように、共通フォルダーの下のアプリケーションプロジェクトにアプリケーションコンテキストのインターフェイスを作成します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

IApplicationDBContext.cs

using Domain.Master;using Microsoft.EntityFrameworkCore;namespace Application.Common.Interfaces{    public interface IApplicationDBContext    {        DbSet<AppSetting> AppSettings { get; set; }        Task<int> SaveChangesAsync();    }}

C#

クリーンなアーキテクチャの原則に従って、ビジネスロジック(アプリケーション)コア部分にアプリケーションコンテキストのインターフェイスを追加しますが、外部エージェントをコアロジックの外に置きたいため、データベースに基づいてインフラストラクチャに実装します。上記のインターフェースの実装となるアプリケーションコンテキストを作成してみましょう。

ここでも、示されているようにプロジェクトを編成し、アプリケーションコンテキストクラスを作成します。

 以下に示すように、persistenceフォルダーの下に クラス AppicationDBContextを作成し、 DBContext と IApplicationDBContext を継承します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

AppSetting の DbSet と SaveChangesAsyncを追加することで、 IApplicationDBContext インターフェイス を実装でき ます。

ApplicationDBContext.cs

using Application.Common.Interfaces;using Domain.Master;using Microsoft.EntityFrameworkCore;namespace Infrastructure.Persistence{    public class ApplicationDBContext : DbContext, IApplicationDBContext    {        #region Ctor        public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options)         : base(options)        {        }        #endregion        #region DbSet        public DbSet<AppSetting> AppSettings { get; set; }        #endregion        #region Methods        public Task<int> SaveChangesAsync()        {            return base.SaveChangesAsync();        }        #endregion    }}

C#

次に、図のようにインフラストラクチャライブラリに依存性注入クラスを追加します。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

クラスについて詳しく説明します。

services.AddDbContext<ApplicationDBContext>(options =>                options.UseSqlServer(configuration.GetConnectionString("RijsatDatabase"),                b => b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName)), ServiceLifetime.Transient);

C#

接続文字列を証明するために上記を追加し、MSSQLServerを使用しています。接続文字列をWebAPIホストのAppSetting.csに挿入するため、  ICongifuration を使用してこの値を取得してい  ます。

services.AddScoped<IApplicationDBContext>(provider => provider.GetService<ApplicationDBContext>());

C#

これは、 ApplicationDBContext.csへ のIApplicationDBContext のプロバイダー、  つまり依存性注入です。

DependencyInjection.cs

using Application.Common.Interfaces;using Infrastructure.Persistence;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;namespace Infrastructure{    public static class DependencyInjection    {        public static IServiceCollection AddPersistence(this IServiceCollection services,            IConfiguration configuration)        {            services.AddDbContext<ApplicationDBContext>(options =>                options.UseSqlServer(configuration.GetConnectionString("RijsatDatabase"),                b => b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName)), ServiceLifetime.Transient);            services.AddScoped<IApplicationDBContext>(provider => provider.GetService<ApplicationDBContext>());            return services;        }    }}

C#

 以下に示すように、WebAPIホストプロジェクトのAppSetting.jsonに接続文字列を追加する必要があり ます。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

データベースに従って接続文字列を指定します。

"ConnectionStrings": {    "RijsatDatabase": "Data Source=rijwan7475001;Initial Catalog=RijsatDb;Integrated Security=True;Connect Timeout=60;TrustServerCertificate=True"  }

JavaScript

さらに、示されているように、 program.cs  (スタートアップ)ファイルのサービス呼び出しに依存性注入のエントリを作成する必要があり ます。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

アプリビルダーの前に、 IServiceCollection の下にサービスのエントリを作成し ます。

//Dependency Injectionbuilder.Services.AddPersistence(builder.Configuration);

C#

.NET6を使用したCleanArchitectureでのEntityFrameworkの実装の準備が整いました。

パッケージマネージャーコンソールで移行コマンドを実行してみましょう。

Add-Migration "DB Initialize"

C#

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

インフラストラクチャプロジェクトをデフォルトとして選択し 、  WebAPIをスタートアッププロジェクトとして選択していることを確認してください 。

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

Update-Database

ベーシック

EntityFrameworkを使用した.NET6によるクリーンなアーキテクチャ

ソリューションにEntityFrameworkを正常に実装しました。データベースは期待どおりに作成されます。

この記事では、.N  ET6とASP.NETCoreWebAPIを使用してCleanArchitectureにエンティティフレームワークを正常に実装しました。

次の記事では、完全なCRUD操作を実行し、Web APIを構築し、Swaggerでテストします。

結論

この記事では、.NET6とASP.NetコアWebAPIを使用してクリーンなアーキテクチャでエンティティフレームワークを実装する方法を段階的に説明しました。さらに、EFデータベース移行コマンドを使用してモデルを作成し、データベースを作成しました。次の記事では、.NET6を使用したCleanArchitectureでエンティティフレームワークを使用したCRUD操作について説明します。

ソース:https ://www.c-sharpcorner.com/article/clean-architecture-with-net-6-using-entity-framework/

#dotnet  #entity-framework