?ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.0 索引
ABP有内建基本常用的仓储功能例如CRUD,而我们可以进行扩充
在架构上仓储的界面与实践是拆开分别在Domain层与基础设施层的
先说仓储的界面部分
这里来做一个用Map的ID来取得对应Player集合的一个仓储界面
首先一样按照架构我们在Core项目中开一个IRepositories数据夹来放
MyCompany.MyProject.CoreIRepositories
然后我们新增一个界面?IPlayerRepository.cs
using Abp.Domain.Repositories;
using MyCompany.MyProject.Entities;
using System.Collections.Generic;
namespace MyCompany.MyProject.IRepositories
{
public interface IPlayerRepository : IRepository
{
List GetPlayersWithMap(long mapID);
}
}
这样我们就完成了仓储的界面定义
而实践部分我们来到?AbsoluteDuo_V4.EntityFrameworkRepositories
建立一个类 PlayerRepository.cs 该类继承ABP提供的基底类?MyProjectRepositoryBase?并且继承我们刚刚定义的界面?IPlayerRepository
using Abp.EntityFramework;
using MyCompany.MyProject.Entities;
using MyCompany.MyProject.IRepositories;
using System.Collections.Generic;
using System.Linq;
namespace MyCompany.MyProject.EntityFramework.Repositories
{
public class PlayerRepository : MyProjectRepositoryBase, IPlayerRepository
{
public PlayerRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider)
{
}
public List GetPlayersWithMap(long mapID)
{
// GetAll()返回一个IQueryable,我们可以通过它来查询
var query = GetAll();
// 也可以直接使用EF的DbContext对象
//var query2 = Context.Players.AsQueryable();
// 另一种选择:直接使用Table属性代替"Context.Players",都是一样的。
//var query3 = Table.AsQueryable();
if (mapID > 0)
{
query = query.Where(c => c.MapID == mapID);
}
return query.ToList();
}
public async Task> GetPlayersWithMapAsync(long mapID)
{
return await GetAllListAsync(c => c.MapID == mapID);
}
}
}
- GetAll()
返回IQueryable
因为有延迟载入(Lazy Loading)的特性,所以实际与数据库连接是在使用ToList()方法时
- GetAllList()
返回List
这个则是在调用时就会立即从数据来源取出数据
到这边仓储就已经建立完成了
下一篇
ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.6?建立应用服务
参照
一步一步使用ABP框架搭建正式项目系列教程
原文:大专栏 ABP (ASP.NET Boilerplate) 应用程序开发框架 新手教学 No.5 建立仓储 Repository
原文地址:https://www.cnblogs.com/chinatrump/p/11505605.html
时间: 2024-10-12 19:35:22