Exemple #1
0
        public virtual T Get(int id)
        {
            if (id == 0)
            {
                return(new T());
            }
            T entity = default(T);

            var keyProperties = SqlMapperExtensions.KeyPropertiesCache(Type);

            if (keyProperties.Count != 1)
            {
                throw new DataException("Get<T> only supports an entity with a single [Key] property");
            }
            var           idProperty    = keyProperties.First();
            var           baseSelectSql = GetBaseSelectSql(Type);
            StringBuilder sql           = new StringBuilder(baseSelectSql);

            sql.AppendFormat(" and {0}=@id limit 1", idProperty.Name);

            var dynParms = new DynamicParameters();

            dynParms.Add("@id", id);
            OpenSlaveConnection(conn =>
            {
                entity = conn.Query <T>(sql.ToString(), dynParms).FirstOrDefault();
            });
            return(entity);
        }
Exemple #2
0
        public virtual T MakePersistent(T entity)
        {
            if (entity == null)
            {
                return(new T());
            }
            var keyProperties = SqlMapperExtensions.KeyPropertiesCache(Type);

            if (keyProperties.Count != 1)
            {
                throw new DataException("Get<T> only supports an entity with a single [Key] property");
            }
            var idProperty = keyProperties.First();
            var id         = idProperty.GetValue(entity).AsInt();

            if (id == 0)
            {
                Insert(entity);
            }
            else
            {
                Update(entity);
            }
            return(entity);
        }
Exemple #3
0
        public virtual T GetDataFromSlave(string fieldName, object value)
        {
            T entity = default(T);

            var keyProperties = SqlMapperExtensions.KeyPropertiesCache(Type);

            if (keyProperties.Count != 1)
            {
                throw new DataException("Get<T> only supports an entity with a single [Key] property");
            }

            var           baseSelectSql = GetBaseSelectSql(Type);
            StringBuilder sql           = new StringBuilder(baseSelectSql);

            sql.AppendFormat(" and {0}=@{0} limit 1", fieldName);

            var dynParms = new DynamicParameters();

            dynParms.Add("@" + fieldName, value);
            OpenSlaveConnection(conn =>
            {
                entity = conn.Query <T>(sql.ToString(), dynParms).FirstOrDefault();
            });
            return(entity);
        }
Exemple #4
0
        protected void Insert(T entity)
        {
            var tableName          = SqlMapperExtensions.GetTableName(Type);
            var allProperties      = SqlMapperExtensions.TypePropertiesCache(Type);
            var keyProperties      = SqlMapperExtensions.KeyPropertiesCache(Type);
            var computedProperties = SqlMapperExtensions.ComputedPropertiesCache(Type);
            var allPropertiesExceptKeyAndComputed = allProperties.Except(keyProperties.Union(computedProperties)).ToList();

            if (keyProperties.Count != 1)
            {
                throw new DataException("Get<T> only supports an entity with a single [Key] property");
            }
            var idProperty = keyProperties.First();

            var sbColumnList = new StringBuilder(null);

            for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count(); i++)
            {
                var property = allPropertiesExceptKeyAndComputed.ElementAt(i);
                sbColumnList.AppendFormat("`{0}`", property.Name);
                if (i < allPropertiesExceptKeyAndComputed.Count() - 1)
                {
                    sbColumnList.Append(", ");
                }
            }

            var sbParameterList = new StringBuilder(null);

            for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count(); i++)
            {
                var property = allPropertiesExceptKeyAndComputed.ElementAt(i);
                sbParameterList.AppendFormat("@{0}", property.Name);
                if (i < allPropertiesExceptKeyAndComputed.Count() - 1)
                {
                    sbParameterList.Append(", ");
                }
            }
            //string sql = String.Format("insert into {0} ({1},Status,LastChanged) values ({2},1,ADDTIME(now(),'00:00:10'))", tableName, sbColumnList.ToString(), sbParameterList.ToString());

            string sql = String.Format("insert into {0} ({1}) values ({2});select LAST_INSERT_ID()", tableName, sbColumnList.ToString(), sbParameterList.ToString());

            OpenConnection(conn =>
            {
                var inserted = conn.Query <int>(sql, entity).FirstOrDefault();
                if (idProperty.PropertyType.Name == "Int16") //for short id/key types issue #196
                {
                    idProperty.SetValue(entity, (Int16)inserted, null);
                }
                else
                {
                    idProperty.SetValue(entity, inserted, null);
                }
            });
        }
Exemple #5
0
        public bool Update(T entity)
        {
            var keyProperties = SqlMapperExtensions.KeyPropertiesCache(Type);

            if (keyProperties.Count == 0)
            {
                throw new ArgumentException("Entity must have at least one [Key] property");
            }

            var name = SqlMapperExtensions.GetTableName(Type);

            var sb = new StringBuilder();

            sb.AppendFormat("update {0} set ", name);

            var allProperties      = SqlMapperExtensions.TypePropertiesCache(Type);
            var computedProperties = SqlMapperExtensions.ComputedPropertiesCache(Type);
            var nonIdProps         = allProperties.Except(keyProperties.Union(computedProperties)).ToList();

            for (var i = 0; i < nonIdProps.Count(); i++)
            {
                var property = nonIdProps.ElementAt(i);
                sb.AppendFormat("`{0}` = @{1}", property.Name, property.Name);
                if (i < nonIdProps.Count() - 1)
                {
                    sb.AppendFormat(", ");
                }
            }
            //sb.Append(",LastChanged=ADDTIME(now(),'00:00:10')");
            sb.Append(" where ");
            for (var i = 0; i < keyProperties.Count; i++)
            {
                var property = keyProperties.ElementAt(i);
                sb.AppendFormat("`{0}` = @{1}", property.Name, property.Name);
                if (i < keyProperties.Count() - 1)
                {
                    sb.AppendFormat(" and ");
                }
            }
            var updated = 0;

            OpenConnection(conn =>
            {
                updated = conn.Execute(sb.ToString(), entity);
            });

            return(updated > 0);
        }
Exemple #6
0
        /// <summary>
        /// 设置状态为-1(没有任何限制)
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public virtual int MakeTransientWithAnyStatus(int id)
        {
            if (id == 0)
            {
                return(0);
            }
            var keyProperties = SqlMapperExtensions.KeyPropertiesCache(Type);

            if (keyProperties.Count != 1)
            {
                throw new DataException("Get<T> only supports an entity with a single [Key] property");
            }
            var idProperty = keyProperties.First();

            return(DeleteAnyStatus(new List <Tuple <string, string, object> > {
                Tuple.Create <string, string, object>(idProperty.Name, "=", id)
            }, false));
        }