예제 #1
0
        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);
        }
예제 #2
0
 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);
 }
예제 #3
0
 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);
         }
     }
 }
예제 #4
0
 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;
 }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
 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;
 }
예제 #8
0
 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;
 }