using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; namespace gehGassi.Core.Interfaces { /// /// Schnittstellenbeschreibung für ein generisches Repository. /// Das Repository verfügt bewusst über keine Update / Save Funktionen. /// Das Prinzip legt nahe, dass ein Repository wie eine Collection zu sehen ist. /// Speichern von Änderungen wird über das UnitOfWork-Pattern durchgeführt. /// /// Typ des Repository public interface IRepository where T : class { #region Get / Abfragen /// /// Gibt eine Entität anhand der eindeutigen Id zurück /// /// Id der Entität /// Entität oder null, wenn nicht gefunden T Get(object id); /// /// Gibt eine Entität anhand der eindeutigen Id zurück /// /// Id der Entität /// Entität oder null, wenn nicht gefunden Task GetAsync(object id); /// /// Gibt alle Entitäten zurück /// /// Liste aller Entitäten IEnumerable GetAll(); /// /// Gibt alle Entitäten zurück /// /// Liste aller Entitäten Task> GetAllAsync(); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Liste gefundener Entitäten IEnumerable Find(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Liste gefundener Entitäten Task> FindAsync(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Liste gefundener Entitäten Task> FindNoTrackingAsync(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen. /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Liste gefundener Entitäten IEnumerable Find(string rawSql, Expression> predicate = null); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Liste gefundener Entitäten Task> FindAsync(string rawSql, Expression> predicate = null); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// SQL-Parameter /// Liste gefundener Entitäten Task> FindSqlAsync(string rawSql, params object[] parameters); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Liste gefundener Entitäten IQueryable Query(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View /// /// Kriterien /// Liste gefundener Entitäten IQueryable QueryView(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View /// /// Kriterien /// Liste gefundener Entitäten Task> QueryViewListAsync(Expression> predicate); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen. /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Liste gefundener Entitäten IQueryable Query(string rawSql, Expression> predicate = null); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen. /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Parameter für die Stored Procedure /// Liste gefundener Entitäten IQueryable QueryStoredProcedure(string rawSql, Expression> predicate = null, params object[] parameters); /// /// Gibt eine Entität oder den Default wert zurück. /// Wenn mehr als 1 gefunden, dann Exception /// /// Kriterien /// Gefundene entität oder Default-Wert T SingleOrDefault(Expression> predicate); /// /// Gibt eine Entität oder den Default wert zurück. /// Wenn mehr als 1 gefunden, dann Exception /// /// Kriterien /// Gefundene entität oder Default-Wert Task SingleOrDefaultAsync(Expression> predicate); /// /// Gibt eine Entität oder den Default wert zurück /// /// Kriterien /// Gefundene entität oder Default-Wert T FirstOrDefault(Expression> predicate); /// /// Gibt eine Entität oder den Default wert zurück /// /// Kriterien /// Gefundene entität oder Default-Wert Task FirstOrDefaultAsync(Expression> predicate); #endregion #region Add / Hinzufügen /// /// Fügt eine Entität zum Repository hinzu /// /// Entität void Add(T entity); /// /// Fügt eine Liste von Entitäten zum Repository hinzu /// /// List von Entitäten void AddRange(IEnumerable entities); #endregion #region remove / Entfernen /// /// Entfernt eine Entität aus dem Repository /// /// Zu entfernende Entität void Remove(T entity); /// /// Entfernt eine Liste von Entitäten aus dem Repository /// /// Liste von Entitäten void RemoveRange(IEnumerable entities); #endregion #region Count /// /// Gibt die Anzahl aller Entitäten zurück /// /// Anzahl Entitäten int Count(); /// /// Gibt die Anzahl aller Entitäten zurück /// /// Anzahl Entitäten Task CountAsync(); /// /// Gibt die Anzahl aller Entitäten zurück die definierten Kriterien entsprechen /// /// Kriterien /// Anzahl Entitäten int Count(Expression> predicate); /// /// Gibt die Anzahl aller Entitäten zurück die definierten Kriterien entsprechen /// /// Kriterien /// Anzahl Entitäten Task CountAsync(Expression> predicate); #endregion #region Custom /// /// Ausführen eines RAW SQL commands /// /// SQL-String /// Parameter /// Anzahl betroffener Datensätze Task ExecuteRawSqlAsync(string sql, Dictionary parameters); #endregion } }