昨天我們建立了 IRepository<T>
介面,並實作了 Repository<T>
接下來要實作各資料表的 Repository 就方便很多,只要繼承 Repository<T>
並定義各個介面就完成了。
這邊定義介面是符合 SOLID 中的 ISP 與 DIP 原則。如果你的 PostRepository 不滿足於原先 Repository<T>
內的實作,你只要在 IPostRepository
中定義好,就可以去實作,未來我們用.NET Core 提供的 DI 時,會註冊當要使用 IPostRepository,就是要使用 PostRepository。
IPostRepository.cs
public interface IPostRepository : IRepository<Post>
{
}
PostRepository.cs
public class PostRepository : Repository<Post>, IPostRepository
{
public PostRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
IUserRepository.cs
public interface IUserRepository : IRepository<User>
{
}
UserRepository.cs
public class UserRepository : Repository<User>, IUserRepository
{
public UserRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
IOptionRepository.cs
public interface IOptionRepository : IRepository<Option>
{
}
OptionRepository.cs
public class OptionRepository : Repository<Option>, IOptionRepository
{
public OptionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
我們前幾天用 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