Heim >Backend-Entwicklung >C#.Net-Tutorial >ABP-Einführungsreihe (4) – Definition der Domänenebene und Implementierung von Warehousing
Repository: Das Repository wird zum Betreiben der Datenbank für den Datenzugriff verwendet. Die Warehousing-Schnittstelle wird auf der Domänenebene definiert, während die Warehousing-Implementierungsklasse auf der Infrastrukturebene geschrieben werden sollte.
In ABP muss die Warehousing-Klasse die IRepository-Schnittstelle implementieren, die häufig verwendete Methoden zum Hinzufügen, Löschen, Ändern und Aggregation definiert, einschließlich synchroner und asynchroner Methoden. Es umfasst hauptsächlich die folgenden Methoden:
ABP stellt eine Standardimplementierung dieser Schnittstelle für verschiedene ORM-Frameworks bereit; Stellt eine Implementierung der generischen Version von EfRepositoryBase
Für NHibernate wird die Implementierung der generischen Version von NhRepositoryBase
public class TaskAppService : ITaskAppService { private readonly IRepository<Task> _taskRepository; public TaskAppService(IRepository<Task> taskRepository) { _taskRepository = taskRepository; }Dies ist die im Beispielcode verwendete Methode 2. So implementieren Sie benutzerdefiniertes WarehousingAngenommen, wir müssen herausfinden, welche Aufgaben einem bestimmten Benutzer zugewiesen sind. Erstellen Sie in der Domänenebene den Ordner IRepositories und definieren Sie dann IBackendTaskRepository.
namespace LearningMpaAbp.IRepositories {/// <summary>/// 自定义仓储示例/// </summary>public interface IBackendTaskRepository : IRepository<Task> { /// <summary> /// 获取某个用户分配了哪些任务 /// </summary> /// <param name="personId">用户Id</param> /// <returns>任务列表</returns> List<Task> GetTaskByAssignedPersonId(long personId); } }In der Infrastrukturschicht wird die Lagerhaltung umgesetzt.
namespace LearningMpaAbp.EntityFramework.Repositories {public class BackendTaskRepository:LearningMpaAbpRepositoryBase<Task>,IBackendTaskRepository{ public BackendTaskRepository(IDbContextProvider<LearningMpaAbpDbContext> dbContextProvider) : base(dbContextProvider) { } /// <summary> /// 获取某个用户分配了哪些任务 /// </summary> /// <param name="personId">用户Id</param> /// <returns>任务列表</returns> public List<Task> GetTaskByAssignedPersonId(long personId) { var query = GetAll(); if (personId>0) { query = query.Where(t => t.AssignedPersonId == personId); } return query.ToList(); } } }Diese Repository-Implementierung erbt von der generischen abstrakten Klasse LearningMpaAbpRepositoryBase, die von der Vorlage generiert wurde, und implementiert dann die IBackendTaskRepository-Schnittstelle. Hier müssen Sie den parametrisierten Konstruktor der Implementierungsklasse explizit deklarieren und den generischen IDbContextProvider verwenden, um die Datenbankkontextunterklasse ChargeStationContext an den Konstruktor der übergeordneten Klasse zu übergeben.
ABP-Einführungsserienkatalog – Praktische Übungen zum Erlernen des Abp-Frameworks