248 lines
11 KiB
C#
248 lines
11 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.Data
|
|
{
|
|
/// <summary>
|
|
/// Schnittstellenbeschreibung für ein generisches Repository.
|
|
/// Speichern von Änderungen wird über das UnitOfWork-Pattern durchgeführt.
|
|
/// </summary>
|
|
/// <typeparam name="T">Typ des Repository</typeparam>
|
|
public interface IRepository<T> where T : class
|
|
{
|
|
#region Get / Abfragen
|
|
|
|
/// <summary>
|
|
/// Gibt eine Entität anhand der eindeutigen Id zurück.
|
|
/// Verwendet Find - NoTracking nicht möglich
|
|
/// </summary>
|
|
/// <param name="id">Id der Entität</param>
|
|
/// <returns>Entität oder null, wenn nicht gefunden</returns>
|
|
T Get(object id);
|
|
|
|
/// <summary>
|
|
/// Gibt eine Entität anhand der eindeutigen Id zurück
|
|
/// Verwendet Find - NoTracking nicht möglich
|
|
/// </summary>
|
|
/// <param name="id">Id der Entität</param>
|
|
/// <returns>Entität oder null, wenn nicht gefunden</returns>
|
|
Task<T> GetAsync(object id);
|
|
|
|
/// <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 mit Sortierung und Skip und Take für Paging
|
|
/// </summary>
|
|
/// <param name="predicate">Kriterien</param>
|
|
/// <param name="orderBySelector">Sortierung</param>
|
|
/// <param name="skip">Anzahl Datensätze auslassen</param>
|
|
/// <param name="take">Anzahl Datensätze selektieren</param>
|
|
/// <param name="ascending">true wenn Sortierung aufsteigend, false sonst</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, Expression<Func<T,object>> orderBySelector, int skip, int take, bool ascending, bool noTracking = true);
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen.
|
|
/// Hier wird zuerst die SQL-Abfrage ausgeführt!
|
|
/// </summary>
|
|
/// <param name="rawSql">SQL-String</param>
|
|
/// <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(string rawSql, Expression<Func<T, bool>> predicate = null, bool noTracking = true);
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen
|
|
/// Hier wird zuerst die SQL-Abfrage ausgeführt!
|
|
/// </summary>
|
|
/// <param name="rawSql">SQL-String</param>
|
|
/// <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(string rawSql, Expression<Func<T, bool>> predicate = null, 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 Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View
|
|
/// </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> QueryView(Expression<Func<T, bool>> predicate, bool noTracking = true);
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View
|
|
/// </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>> QueryViewListAsync(Expression<Func<T, bool>> predicate, bool noTracking = true);
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen.
|
|
/// Hier wird zuerst die SQL-Abfrage ausgeführt!
|
|
/// </summary>
|
|
/// <param name="rawSql">SQL-String</param>
|
|
/// <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(string rawSql, Expression<Func<T, bool>> predicate = null, 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);
|
|
|
|
/// <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> FirstOrDefaultAsync(Expression<Func<T, bool>> predicate, bool noTracking = true);
|
|
|
|
#endregion
|
|
|
|
#region Add / Hinzufügen
|
|
|
|
/// <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);
|
|
|
|
#endregion
|
|
|
|
#region Update
|
|
|
|
/// <summary>
|
|
/// Aktualisieren einer Entität
|
|
/// </summary>
|
|
/// <param name="entity">Entität</param>
|
|
void Update(T entity);
|
|
|
|
/// <summary>
|
|
/// Aktualisieren einer Liste von Entitäten
|
|
/// </summary>
|
|
/// <param name="entities">List von Entitäten</param>
|
|
void UpdateRange(IEnumerable<T> entities);
|
|
|
|
#endregion
|
|
|
|
#region remove / Entfernen
|
|
|
|
/// <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 Entitäten</returns>
|
|
int Count();
|
|
|
|
/// <summary>
|
|
/// Gibt die Anzahl aller Entitäten zurück
|
|
/// </summary>
|
|
/// <returns>Anzahl Entitäten</returns>
|
|
Task<int> CountAsync();
|
|
|
|
/// <summary>
|
|
/// Gibt die Anzahl aller Entitäten zurück die definierten Kriterien entsprechen
|
|
/// </summary>
|
|
/// <param name="predicate">Kriterien</param>
|
|
/// <returns>Anzahl Entitäten</returns>
|
|
int Count(Expression<Func<T, bool>> predicate);
|
|
|
|
/// <summary>
|
|
/// Gibt die Anzahl aller Entitäten zurück die definierten Kriterien entsprechen
|
|
/// </summary>
|
|
/// <param name="predicate">Kriterien</param>
|
|
/// <returns>Anzahl Entitäten</returns>
|
|
Task<int> CountAsync(Expression<Func<T, bool>> predicate);
|
|
|
|
#endregion
|
|
|
|
#region Custom
|
|
|
|
/// <summary>
|
|
/// Ausführen eines RAW SQL commands
|
|
/// </summary>
|
|
/// <param name="sql">SQL-String</param>
|
|
/// <param name="parameters">Parameter</param>
|
|
/// <returns>Anzahl betroffener Datensätze</returns>
|
|
Task<int> ExecuteRawSqlAsync(string sql, object[] parameters);
|
|
|
|
#endregion
|
|
}
|
|
}
|