149 lines
5.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace gehGassiApp.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service für die Verwaltung von Entitäten
/// </summary>
/// <typeparam name="T">Typ des Service</typeparam>
public interface IService<T> where T : class
{
#region Get
/// <summary>
/// Gibt eine Entität anhand der eindeutigen Id zurück
/// </summary>
/// <param name="id">Id der Entität</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Entität oder null, wenn nicht gefunden</returns>
T Get(object id, bool noTracking = true);
/// <summary>
/// Gibt eine Entität anhand der eindeutigen Id zurück
/// </summary>
/// <param name="id">Id der Entität</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Entität oder null, wenn nicht gefunden</returns>
Task<T> GetAsync(object id, bool noTracking = true);
/// <summary>
/// Gibt alle Entitäten zurück
/// </summary>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Liste aller Entitäten</returns>
IEnumerable<T> GetAll(bool noTracking = true);
/// <summary>
/// Gibt alle Entitäten zurück
/// </summary>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Liste aller Entitäten</returns>
Task<IEnumerable<T>> GetAllAsync(bool noTracking = true);
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Liste gefundener Entitäten</returns>
IEnumerable<T> Find(Expression<Func<T, bool>> predicate, bool noTracking = true);
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Liste gefundener Entitäten</returns>
Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> predicate, bool noTracking = true);
/// <summary>
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Liste gefundener Entitäten</returns>
IQueryable<T> Query(Expression<Func<T, bool>> predicate, bool noTracking = true);
/// <summary>
/// Gibt eine Entität oder den Default wert zurück
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Gefundene entität oder Default-Wert</returns>
T SingleOrDefault(Expression<Func<T, bool>> predicate, bool noTracking = true);
/// <summary>
/// Gibt eine Entität oder den Default wert zurück
/// </summary>
/// <param name="predicate">Kriterien</param>
/// <param name="noTracking">Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten</param>
/// <returns>Gefundene entität oder Default-Wert</returns>
Task<T> SingleOrDefaultAsync(Expression<Func<T, bool>> predicate, bool noTracking = true);
#endregion
#region CRUD
/// <summary>
/// Fügt eine Entität zum Repository hinzu
/// </summary>
/// <param name="entity">Entität</param>
void Add(T entity);
/// <summary>
/// Fügt eine Liste von Entitäten zum Repository hinzu
/// </summary>
/// <param name="entities">List von Entitäten</param>
void AddRange(IEnumerable<T> entities);
/// <summary>
/// Entfernt eine Entität aus dem Repository
/// </summary>
/// <param name="entity">Zu entfernende Entität</param>
void Remove(T entity);
/// <summary>
/// Entfernt eine Liste von Entitäten aus dem Repository
/// </summary>
/// <param name="entities">Liste von Entitäten</param>
void RemoveRange(IEnumerable<T> entities);
#endregion
#region Count
/// <summary>
/// Gibt die Anzahl aller Entitäten zurück
/// </summary>
/// <returns>Anzahl</returns>
int Count();
/// <summary>
/// Gibt die Anzahl aller Entitäten zurück
/// </summary>
/// <returns>Anzahl</returns>
Task<int> CountAsync();
#endregion
#region Commit / UnitOfWork
/// <summary>
/// Schließt Daten-Änderungen ab und speichert die selben
/// </summary>
int Commit();
/// <summary>
/// Schließt Daten-Änderungen ab und speichert die selben
/// </summary>
Task<int> CommitAsync();
#endregion
}
}