public static async Task <List <T> > get(QueryResult result) { List <T> res = new List <T>(); IEntityManager em = EntityManager.getInstance(); EntityRepository repo = em.getRepository(result.entity_repository_name); while (await result.data.ReadAsync()) { Type entity_type = repo.getEntityType(); object obj = Activator.CreateInstance(repo.getEntityType()); ((IEntity)obj).assignData(result.data); res.Add((T)obj); } return(res); }
/** * Find one Entity by filter * * @return Task<Entity> */ public virtual async Task <Entity> findOne(dynamic entity_repository_name, List <QueryFilter> filter, string connection_name = null) { QueryBuilder qb = this.select(entity_repository_name, null, null, connection_name); qb.filter(filter); qb.limit(1); await qb.execute(); DbDataReader res = qb.getRawResult(); if (await res.ReadAsync()) { EntityRepository repository = this.getRepository(entity_repository_name); Entity entity = repository.Instance(res); return(entity); } return(null); }
/** * Assign values from database * @param DbDataReader data */ public virtual void assignData(DbDataReader res) { IEntityManager em = EntityManager.getInstance(); Connection connection = em.getConnection(this.getConnectionName()); EntityRepository repo = em.getRepository(this.getEntityRepositoryType()); Dictionary <string, EntityFieldInfo> st = repo.getStruct(); foreach (EntityFieldInfo field in st.Values) { if (!field.isDbType()) { continue; } string field_name = field.fieldName(); int pos = res.GetOrdinal(field_name); dynamic db_value = res.GetFieldValue <dynamic>(pos); this.setDatabaseValue(field, connection, db_value); } }
/** * Delete Entity */ public virtual async void remove() { this.preRemove(); bool execute = false; IEntityManager em = EntityManager.getInstance(); Connection connection = em.getConnection(this.getConnectionName()); QueryBuilder qb = em.createQueryBuilder(this.getConnectionName()); EntityRepository repo = em.getRepository(this.getEntityRepositoryType()); Dictionary <string, EntityFieldInfo> st = repo.getStruct(); foreach (EntityFieldInfo field in st.Values) { if (!field.isDbType()) { continue; } string field_name = field.fieldName(); dynamic old_value = this._old_data.ContainsKey(field_name) ? this._old_data[field_name] : null; // If primary if (field.isPrimary()) { execute = true; qb.addFilter(new QueryFilter(field_name, "=", old_value)); } } // Execute query if (execute) { await qb.execute(); } this.postRemove(); }