public virtual void Create(User user) { DataRow userRow = DataManager.Create(UserSourceName); var userProps = user.GetType().GetProperties(); foreach (var prop in userProps) if (user.IsChanged(prop.Name)) { string key = ResolveFieldName(prop.Name); object value = prop.GetValue(user, null); if (userRow.Table.Columns.Contains(key) && !userRow.Table.Columns[key].AutoIncrement) userRow[key] = value ?? DBNull.Value; } DataManager.Update(userRow); }
protected Query GetUserQueryBySample(User userSample) { var condition = new QueryGroupNode(GroupType.And); if (userSample.Id != null) condition.Nodes.Add( (QField)ResolveFieldName("Id") == new QConst(userSample.Id) ); else if (userSample.Username != null) condition.Nodes.Add( (QField)ResolveFieldName("Username") == (QConst)userSample.Username ); else if (userSample.Email != null) condition.Nodes.Add( (QField)ResolveFieldName("Email") == (QConst)userSample.Email ); return new Query(LoadUserSourceName, condition); }
protected void SetUserProps(User user, IDictionary data) { var userProps = user.GetType().GetProperties(); foreach (var prop in userProps) { string key = ResolveFieldName(prop.Name); if (data.Contains(key)) { object value = data[key]; if (value == DBNull.Value) value = null; prop.SetValue(user, value, null); } } }
protected bool EnsureUserId(User user) { // if user id is unknown, lets resolve it using Load procedure if (user.Id == null) { var loadedUser = Load(user); if (loadedUser.Id == null) return false; user.Id = loadedUser.Id; } return true; }
public virtual bool Update(User user) { if (!EnsureUserId(user)) return false; IQueryNode condition = (QField)ResolveFieldName("Id") == new QConst(user.Id); var userRow = DataManager.Load(new Query(UserSourceName, condition)); if (userRow == null) return false; var userProps = user.GetType().GetProperties(); foreach (var prop in userProps) if (user.IsChanged(prop.Name)) { string key = ResolveFieldName(prop.Name); object value = prop.GetValue(user, null); if (userRow.Table.Columns.Contains(key) && !userRow.Table.Columns[key].AutoIncrement) userRow[key] = value ?? DBNull.Value; } DataManager.Update(userRow); return true; }
public virtual IEnumerable<User> LoadAll(User userSample, int pageIndex, int pageSize, out int totalRecords) { var q = GetUserQueryBySample(userSample); totalRecords = DataManager.Dalc.RecordsCount( q.SourceName, q.Root ); if (totalRecords==0) return new User[0]; q.StartRecord = pageIndex*pageSize; q.RecordCount = pageSize; var usersTbl = DataManager.LoadAll(q); var res = new List<User>(); foreach (DataRow userRow in usersTbl.Rows) { var user = new User(); SetUserProps(user, new DictionaryWrapper<string,object>( new DataRowDictionaryWrapper(userRow) ) ); res.Add(user); } return res; }
public virtual User Load(User userSample) { var data = new Hashtable(); var q = GetUserQueryBySample(userSample); if (DataManager.Dalc.LoadRecord(data, q)) { var user = new User(); SetUserProps(user, data); return user; } return null; }
public virtual bool Delete(User user) { if (!EnsureUserId(user)) return false; var userRow = DataManager.Load(new Query(UserSourceName, (QField)ResolveFieldName("Id") == new QConst(user.Id) )); if (userRow == null) return false; DataManager.Delete(userRow); return true; }