iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
SideProject30

我想自己刻部落格系列 第 11

建立各資料表的 Repository 與註冊 DbContext

  • 分享至 

  • xImage
  •  

昨天我們建立了 IRepository<T> 介面,並實作了 Repository<T>

接下來要實作各資料表的 Repository 就方便很多,只要繼承 Repository<T> 並定義各個介面就完成了。

這邊定義介面是符合 SOLID 中的 ISP 與 DIP 原則。如果你的 PostRepository 不滿足於原先 Repository<T> 內的實作,你只要在 IPostRepository 中定義好,就可以去實作,未來我們用.NET Core 提供的 DI 時,會註冊當要使用 IPostRepository,就是要使用 PostRepository。

PostRepository

IPostRepository.cs

public interface IPostRepository : IRepository<Post>
{
}

PostRepository.cs

public class PostRepository : Repository<Post>, IPostRepository
{
    public PostRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
    {
    }
}

UserRepository

IUserRepository.cs

public interface IUserRepository : IRepository<User>
{
}

UserRepository.cs

public class UserRepository : Repository<User>, IUserRepository
{
    public UserRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
    {
    }
}

OptionRepository

IOptionRepository.cs

public interface IOptionRepository : IRepository<Option>
{
}

OptionRepository.cs

public class OptionRepository : Repository<Option>, IOptionRepository
{
    public OptionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
    {
    }
}

註冊 DbContext

我們前幾天用 EF Core Prower Tool 幫我們反向工程,建立資料庫物件 MyBlogContext,要讓 ASP.NET Core 知道,並使用 MyBlogContext 的話,要去 Program.cs 做設定

builder.Services.AddDbContext<MyBlogContext>(options =>
              options.UseSqlServer(builder.Configuration.GetConnectionString("MyBlogConnection")));

告訴 ASP.NET Core 我們有 MyBlogContext 這個物件可以使用,並且設定 SqlServer 的資料庫連線。

資料庫連線位於 appsettings.json 裡面的 ConnectionStrings

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "MyBlogConnection": "Data Source=localhost;Database=MyBlog;TrustServerCertificate=true;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "AllowedHosts": "*"
}

程式碼可以看我的 GitHub


上一篇
關於三層式架構
下一篇
使用 DI 相依性注入
系列文
我想自己刻部落格31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言