using System.Collections.Generic;
using Kreta.Framework.Collections.Generic;
namespace Kreta.Framework.Entities.Generic
{
///
/// Entitások adatbázisműveleteit végző objektumának felülete.
///
public interface IEntityDataAccessor
where EntityType : Kreta.Framework.Entities.Entity
{
///
/// Betölti egy entitás állapotát az adatbázisból.
///
/// A betöltendő entitás
/// Az entitás adatbázisbeli azonosítója
/// True, ha sikeres; egyébként false
bool LoadEntity(EntityType entity, int entityId);
///
/// Oszlopszűrten beltölti egy entitás állapotát az adatbázisból
///
/// A betöltendő entitás
/// Az entitás adatbázisbeli azonosítója
/// A szűrés módja, megengedő vagy tiltó
/// A szűrendő oszlopok felsorolása
/// True, ha sikeres; egyébként False
bool FilteredLoadEntity(EntityType entity, int entityId, ColumnFilterMode columnFilterMode, IEnumerable columns);
///
/// Betölt egy entitás listát a megadott szűrő feltétellel.
///
/// A feltöltendő lista
/// A szűrő SQL töredék
/// a szűrőben megadott paraméterek commandBinding atalakitasa
void LoadWithFilter(IEntityCollection collection, string filter, Dictionary commandParameters);
///
/// Oszlopszűrten betölt egy entitás listát a megadott szűrő feltétellel.
///
/// A feltöltendő lista
/// A szűrő SQL töredék
/// A szűrés módja, megengedő vagy tiltó
/// A szűrendő oszlopok felsorolása
/// a szűrőben megadott paraméterek commandBinding atalakitasa
void LoadWithFilter(IEntityCollection collection, string filter, ColumnFilterMode columnFilterMode, IEnumerable columns, Dictionary commandParameters);
///
/// Létrehoz egy új entitás példányt az adatbázisban.
///
/// A létrehozandó entitás
void InsertEntity(EntityType entity);
///
/// Módosít egy entitás példányt az adatbázisban.
///
/// A módosítandó entitás
/// True, ha sikeres; egyébként false
bool UpdateEntity(EntityType entity);
///
/// Módosítja egy entitás példány asszociációs kapcsolómezőit az adatbázisban.
///
/// A módosítandó entitás
/// True, ha sikeres; egyébként false
bool UpdateAssociations(EntityType entity);
///
/// Töröl egy entitás példányt az adatbázisból.
///
/// A törlendő entitás
/// Logikai törlés (Archiv flag)
void DeleteEntity(EntityType entity, bool logikai = true);
}
}