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); }
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); }
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); }
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); } }); }
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); }
/// <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)); }