Web 应用开发教程 - 第 7 部分:作者:数据库集成
简介
本部分介绍如何为上一部分引入的 Author 实体配置数据库集成。
DB 上下文
打开 Acme.BookStore.MongoDB 项目 MongoDb 文件夹中的 BookStoreMongoDbContext,并向类中添加以下属性:
public IMongoCollection<Author> Authors => Collection<Author>();
实现 IAuthorRepository 接口
在 Acme.BookStore.MongoDB 项目(Authors 文件夹内)中创建一个新类,命名为 MongoDbAuthorRepository,并粘贴以下代码:
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Collections.Generic;
using System.Threading.Tasks;
using Acme.BookStore.MongoDB;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
namespace Acme.BookStore.Authors;
public class MongoDbAuthorRepository
: MongoDbRepository<BookStoreMongoDbContext, Author, Guid>,
IAuthorRepository
{
public MongoDbAuthorRepository(
IMongoDbContextProvider<BookStoreMongoDbContext> dbContextProvider
) : base(dbContextProvider)
{
}
public async Task<Author> FindByNameAsync(string name)
{
var queryable = await GetQueryableAsync();
return await queryable.FirstOrDefaultAsync(author => author.Name == name);
}
public async Task<List<Author>> GetListAsync(
int skipCount,
int maxResultCount,
string sorting,
string filter = null)
{
var queryable = await GetQueryableAsync();
return await queryable
.WhereIf<Author, IQueryable<Author>>(
!filter.IsNullOrWhiteSpace(),
author => author.Name.Contains(filter)
)
.OrderBy(sorting)
.Skip(skipCount)
.Take(maxResultCount)
.ToListAsync();
}
}
- 继承自
MongoDbRepository,因此继承了标准仓储方法的实现。 WhereIf是 ABP 的一个快捷扩展方法。仅当满足第一个条件时(仅当提供了过滤器时按名称过滤),它才添加Where条件。你也可以自己实现,但这类快捷方法能让我们的工作更轻松。sorting可以是像Name、Name ASC或Name DESC这样的字符串。这是通过使用 System.Linq.Dynamic.Core NuGet 包实现的。
有关基于 MongoDB 的仓储的更多信息,请参阅 MongoDB 集成文档。
抠丁客


