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 bereit.
Für NHibernate wird die Implementierung der generischen Version von NhRepositoryBase bereitgestellt.
Die Implementierung der generischen Version bedeutet, dass diese Methoden in den meisten Fällen ausreichen, um die Anforderungen allgemeiner Entitäten zu erfüllen. Wenn diese Methoden für die Entität ausreichend sind, müssen wir die für diese Entität erforderliche Repository-Schnittstelle/-Klasse nicht erstellen.
Sie können die Warehouse-Referenz direkt in der Anwendungsdienstschicht definieren und sie dann über den Konstruktor einfügen. Task Warehousing kann in unserer Anwendungsdienstschicht auf folgende Weise verwendet werden:
public class TaskAppService : ITaskAppService {
private readonly IRepository<Task> _taskRepository;
public TaskAppService(IRepository<Task> taskRepository)
{
_taskRepository = taskRepository;
}
Nach dem Login kopieren
Dies ist die im Beispielcode verwendete Methode
2. So implementieren Sie benutzerdefiniertes Warehousing
Angenommen, 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);
}
}
Nach dem Login kopieren
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();
}
}
}
Nach dem Login kopieren
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.
3. Vorsichtsmaßnahmen für die Lagerung
Bei der Lagerungsmethode öffnet und schließt ABP automatisch die Datenbankverbindung.
Beim Aufruf der Warehousing-Methode wird automatisch die Datenbankverbindung geöffnet und die Transaktion gestartet.
Wenn eine Repository-Methode eine andere Repository-Methode aufruft, teilen sie tatsächlich dieselbe Datenbankverbindung und Transaktion.
Repository-Objekte sind temporär, da die IRepository-Schnittstelle standardmäßig von der ITransientDependency-Schnittstelle erbt. Daher erstellt der IOC-Container nur dann automatisch eine neue Instanz des Warehousing-Objekts, wenn es injiziert werden muss.
Das standardmäßige generische Repository kann die meisten unserer Anforderungen erfüllen. Erst wenn diese nicht erfüllt ist, wird eine maßgeschneiderte Lagerhaltung erstellt.
Der Quellcode wurde zu Ihrer eigenen Referenz auf Github-LearningMpaAbp hochgeladen.
ABP-Einführungsserienkatalog – Praktische Übungen zum Erlernen des Abp-Frameworks
Das Obige ist die ABP-Einführungsserie (4) – der Inhalt der Definition von Warehousing und Implementierung auf der Domänenebene. Weitere verwandte Inhalte finden Sie hier Achten Sie auf die chinesische PHP-Website (www.php.cn)!