namespace DevLeap.Linq.Architecture.NTier.DataLayer {
public interface IDal<TEntity, TEntityList, TKey>
where TEntity : BaseEntity, new()
where TEntityList : IEnumerable<TEntity> {

/// <summary>
/// Pidv novou entitu do trvalho loit.
/// </summary>
/// <param name="item">Pidvan instance entity</param>
/// <returns>Prv pidan entita</returns>
TEntity Add(TEntity item);

/// <summary>
/// Nat entitu z trvalho loit.
/// </summary>
/// <param name="key">Kl pro naten instance entity</param>
/// <returns>Instance entity, pokud existuje.</returns>
TEntity Read(TKey key);

/// <summary>
/// Nat vechny dostupn instance entit z trvalho loit.
/// </summary>
/// <returns>Seznam existujcch entit</returns>
/// <remarks>Ve skutenosti by mohla existovat podmnka pro filtrovn,
/// vyjden pomoc dotazovacho vrazu LINQ.</remarks>
TEntityList ReadAll();

/// <summary>
/// Aktualizuje entitu v trvalm loiti.
/// </summary>
/// <param name="item">Instance aktualizovan entity</param>
/// <returns>Prv zaktualizovan entita</returns>
TEntity Update(TEntity item);

/// <summary>
/// Mae entitu z trvalho loit.
/// </summary>
/// <param name="item">Entita, je se m smazat.</param>
/// <returns>Vsledek operace mazn</returns>
Boolean Delete(TEntity item);
}
}
