Jakeuj's Notes master Help

ABP.IO 新手教學 No.08 開發教學 第 7 部分:作者:數據庫集成 {id="ABP-IO-Tutorial-No-08-Part-7-Authors-Database-Integration"}

主要說明如何實現自定義倉儲

其他之前已說明過的部分則快速帶過

關於本教程

在本系列教程中,您將構建一個名為Acme.BookStore. 此應用程序用於管理書籍及其作者的列表。它是使用以下技術開發的:

  • Entity Framework Core作為 ORM 提供者。

  • Angular作為 UI 框架。

本教程分為以下幾個部分;

下載源代碼

本教程根據您的UI數據庫首選項有多個版本。我們準備了幾個要下載的源代碼組合:

介紹

這一部分解釋瞭如何為上一部分介紹的Author實體配置數據庫集成。

數據庫上下文

BookStoreDbContextAcme.BookStore.EntityFrameworkCore項目中打開並添加以下DbSet屬性:

public DbSet<Author> Authors { get; set; }
1627029766

然後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之前對實體所做的一樣,因此無需再次解釋。

1627029930

創建新的數據庫遷移

啟動解決方案配置為使用Entity Framework Core Code First Migrations 。由於我們已經更改了數據庫映射配置,我們應該創建一個新的遷移並將更改應用於數據庫。

Acme.BookStore.EntityFrameworkCore.DbMigrations項目目錄中打開命令行終端並鍵入以下命令:

dotnet ef migrations add Added_Authors

這將向項目添加一個新的遷移類:

bookstore-efcore-migration-authors

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

dotnet ef database update
1627030142

實現 IAuthorRepository

創建一個新類, EfCoreAuthorRepositoryAcme.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 包。

1627030341

下一部分

請參閱本教程的下一部分

Jakeuj

PS5

  • ABP

  • 回首頁

本文章從點部落遷移至 Writerside

14 October 2025