ABP.IO 新手教學 No.08 開發教學 第 7 部分:作者:數據庫集成 {id="ABP-IO-Tutorial-No-08-Part-7-Authors-Database-Integration"}
主要說明如何實現自定義倉儲
其他之前已說明過的部分則快速帶過
關於本教程
在本系列教程中,您將構建一個名為Acme.BookStore. 此應用程序用於管理書籍及其作者的列表。它是使用以下技術開發的:
本教程分為以下幾個部分;
下載源代碼
本教程根據您的UI和數據庫首選項有多個版本。我們準備了幾個要下載的源代碼組合:
介紹
這一部分解釋瞭如何為上一部分介紹的Author實體配置數據庫集成。
數據庫上下文
BookStoreDbContext在Acme.BookStore.EntityFrameworkCore項目中打開並添加以下DbSet屬性:
public DbSet<Author> Authors { get; set; }

然後BookStoreDbContextModelCreatingExtensions在同一個項目中打開類,在ConfigureBookStore方法的末尾添加以下幾行:
builder.Entity<Author>(b =>
{
b.ToTable(BookStoreConsts.DbTablePrefix + "Authors",
BookStoreConsts.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.Name)
.IsRequired()
.HasMaxLength(AuthorConsts.MaxNameLength);
b.HasIndex(x => x.Name);
});
這就像Book之前對實體所做的一樣,因此無需再次解釋。

創建新的數據庫遷移
啟動解決方案配置為使用Entity Framework Core Code First Migrations 。由於我們已經更改了數據庫映射配置,我們應該創建一個新的遷移並將更改應用於數據庫。
在Acme.BookStore.EntityFrameworkCore.DbMigrations項目目錄中打開命令行終端並鍵入以下命令:
dotnet ef migrations add Added_Authors
這將向項目添加一個新的遷移類:

您可以在同一命令行終端中使用以下命令對數據庫應用更改:
dotnet ef database update

實現 IAuthorRepository
創建一個新類, EfCoreAuthorRepository在Acme.BookStore.EntityFrameworkCore項目內部(Authors文件夾中)命名並粘貼以下代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Acme.BookStore.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Acme.BookStore.Authors
{
public class EfCoreAuthorRepository
: EfCoreRepository<BookStoreDbContext, Author, Guid>,
IAuthorRepository
{
public EfCoreAuthorRepository(
IDbContextProvider<BookStoreDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public async Task<Author> FindByNameAsync(string name)
{
var dbSet = await GetDbSetAsync();
return await dbSet.FirstOrDefaultAsync(author => author.Name == name);
}
public async Task<List<Author>> GetListAsync(
int skipCount,
int maxResultCount,
string sorting,
string filter = null)
{
var dbSet = await GetDbSetAsync();
return await dbSet
.WhereIf(
!filter.IsNullOrWhiteSpace(),
author => author.Name.Contains(filter)
)
.OrderBy(sorting)
.Skip(skipCount)
.Take(maxResultCount)
.ToListAsync();
}
}
}
繼承自EfCoreRepository ,因此它繼承了標準存儲庫方法實現。
WhereIf是 ABP 框架的快捷擴展方法。 Where僅當第一個條件滿足時才添加條件(它按名稱過濾,僅當提供了過濾器時)。你可以自己做同樣的事情,但這些類型的快捷方法讓我們的生活更輕鬆。
sorting可以是像Name, Name ASC或 之類的字符串Name DESC 。可以使用System.Linq.Dynamic.Core NuGet 包。

下一部分
請參閱本教程的下一部分。

PS5
本文章從點部落遷移至 Writerside
14 October 2025