using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace gehGassiApp.Core.Data { /// /// Schnittstellenbeschreibung für ein generisches Repository. /// 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. /// Verwendet Find - NoTracking nicht möglich /// /// 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 /// Verwendet Find - NoTracking nicht möglich /// /// Id der Entität /// Entität oder null, wenn nicht gefunden Task GetAsync(object id); /// /// Gibt alle Entitäten zurück /// /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste aller Entitäten IEnumerable GetAll(bool noTracking = true); /// /// Gibt alle Entitäten zurück /// /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste aller Entitäten Task> GetAllAsync(bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten IEnumerable Find(Expression> predicate, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten Task> FindAsync(Expression> predicate, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen mit Sortierung und Skip und Take für Paging /// /// Kriterien /// Sortierung /// Anzahl Datensätze auslassen /// Anzahl Datensätze selektieren /// true wenn Sortierung aufsteigend, false sonst /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten Task> FindAsync(Expression> predicate, Expression> orderBySelector, int skip, int take, bool ascending, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen. /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten IEnumerable Find(string rawSql, Expression> predicate = null, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten Task> FindAsync(string rawSql, Expression> predicate = null, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten IQueryable Query(Expression> predicate, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten IQueryable QueryView(Expression> predicate, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen von einem View /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten Task> QueryViewListAsync(Expression> predicate, bool noTracking = true); /// /// Gibt eine Liste aller Entitäten zurück welche definierten Kriterien entsprechen. /// Hier wird zuerst die SQL-Abfrage ausgeführt! /// /// SQL-String /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Liste gefundener Entitäten IQueryable Query(string rawSql, Expression> predicate = null, bool noTracking = true); /// /// Gibt eine Entität oder den Default wert zurück /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Gefundene entität oder Default-Wert T SingleOrDefault(Expression> predicate, bool noTracking = true); /// /// Gibt eine Entität oder den Default wert zurück /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Gefundene entität oder Default-Wert Task SingleOrDefaultAsync(Expression> predicate, bool noTracking = true); /// /// Gibt eine Entität oder den Default wert zurück /// /// Kriterien /// Gibt an ob NoTRacking verwendet werden soll. Es werden keine Entitäten im EF-Speicher gehalten /// Gefundene entität oder Default-Wert Task FirstOrDefaultAsync(Expression> predicate, bool noTracking = true); #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 Update /// /// Aktualisieren einer Entität /// /// Entität void Update(T entity); /// /// Aktualisieren einer Liste von Entitäten /// /// List von Entitäten void UpdateRange(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, object[] parameters); #endregion } }