private CPQuery GeUpdateQuery() { if (_setProxy == null) { throw new InvalidOperationException("请先调用Set方法。"); } if (_whereProxy == null) { throw new InvalidOperationException("请先调用Where方法。"); } CPQuery update = _setProxy.GetUpdateQuery(null); CPQuery where = _whereProxy.GetWhereQuery(); CPQuery query = update + where; return(query); }
/// <summary> /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作 /// </summary> /// <returns></returns> public int Update() { if (_setProxy == null) { throw new InvalidOperationException("请先调用Set方法。"); } if (_whereProxy == null) { throw new InvalidOperationException("请先调用Where方法。"); } CPQuery update = _setProxy.GetUpdateQuery(null); CPQuery where = _whereProxy.GetWhereQuery(); CPQuery query = update + where; return(query.ExecuteNonQuery()); }
/// <summary> /// 根据已修改的实体属性,生成INSERT语句,并执行数据库插入操作, /// 注意:此方法只能在实体的代理对象上调用。 /// </summary> /// <returns>数据库操作过程中影响的行数</returns> public int Insert() { IEntityProxy proxy = this as IEntityProxy; if (proxy == null) { throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Insert方法。"); } CPQuery insert = GetInsertQuery(); if (insert == null) { return(-1); } proxy.ClearChangeFlags(); // 清除修改标记,防止多次调用 return(insert.ExecuteNonQuery()); }
/// <summary> /// 根据已修改的实体属性,生成DELETE查询条件,并执行数据库插入操作, /// 注意:此方法只能在实体的代理对象上调用。 /// </summary> /// <returns>数据库操作过程中影响的行数</returns> public int Delete() { IEntityProxy proxy = this as IEntityProxy; if (proxy == null) { throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Delete方法。"); } CPQuery where = GetWhereQuery(); if (where == null) { return(-1); // 不允许没有WHERE条件的删除,如果确实需要,请手工写SQL } CPQuery query = this.DbContext.CreateCPQuery() + "DELETE FROM " + GetTableName() + where; proxy.ClearChangeFlags(); // 清除修改标记,防止多次调用 return(query.ExecuteNonQuery()); }
private CPQuery GetInsertQueryCommand() { IEntityProxy proxy = this as IEntityProxy; if (proxy == null) { throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Insert方法。"); } CPQuery insert = GetInsertQuery(); if (insert == null) { return(null); } proxy.ClearChangeFlags(); // 清除修改标记,防止多次调用 return(insert); }
internal CPQuery GetInsertQuery() { IEntityProxy proxy = this as IEntityProxy; string[] names = proxy.GetChangeNames(); object[] values = proxy.GetChangeValues(); if (names.Length == 0) { return(null); // 没有设置任何属性,应该不会发生吧? } CPQuery query = this.DbContext.CreateCPQuery(); query = query + "INSERT INTO " + GetTableName() + "(" + string.Join(",", names.ToArray()) + ") VALUES ("; for (int i = 0; i < values.Length; i++) { object value = values[i]; if (value == null) { query = query + "NULL"; } else { query = query + new QueryParameter(value); } if (i < values.Length - 1) { query.AppendSql(","); } } query.AppendSql(")"); return(query); }
private void SetInArrayParameter(string placeholder, ICollection collection) { StringBuilder sb = new StringBuilder(128); // 优先检查 int[], Guid[] 类型,并转成SQL语句中的一部分 // 因为这些强类型的数据本身是安全的,不存在注入,就不转换成命令参数。 CPQuery.ArrayToString(collection, sb); if (sb.Length == 0) // 如果不是 int[], Guid[] ,就转换成命令参数 { foreach (object obj in collection) { string name = "x" + (_paramIndex++).ToString(); DbParameter parameter = _command.CreateParameter(); parameter.ParameterName = ParaNameBuilder.GetParaName(name); parameter.Value = obj; _command.Parameters.Add(parameter); if (sb.Length > 0) { sb.Append(','); } sb.Append(ParaNameBuilder.GetPlaceholder(name)); } } if (sb.Length == 0) { sb.Append("NULL"); } _command.CommandText = _command.CommandText.Replace(placeholder, sb.ToString()); }
/// <summary> /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作 /// </summary> /// <returns></returns> public int Update() { CPQuery query = GeUpdateQuery(); return(query.ExecuteNonQuery()); }
/// <summary> /// 将指定的字符串(T-SQL的片段)转成CPQuery对象 /// </summary> /// <param name="sql">T-SQL的片段的字符串</param> /// <returns>包含T-SQL的片段的CPQuery对象</returns> public static CPQuery AsCPQuery(this string sql) { return(CPQuery.Create(sql)); }
/// <summary> /// 根据Where调用产生的查询条件获取实体对象列表 /// </summary> /// <returns></returns> public async Task <List <T> > ToListAsync() { CPQuery query = GetSelectQuery(); return(await query.ToListAsync <T>()); }
/// <summary> /// 根据Where调用产生的查询条件获取实体对象列表 /// </summary> /// <returns></returns> public List <T> ToList() { CPQuery query = GetSelectQuery(); return(query.ToList <T>()); }
/// <summary> /// 根据Where调用产生的查询条件获取单个实体对象 /// </summary> /// <returns></returns> public async Task <T> ToSingleAsync() { CPQuery query = GetSelectQuery(); return(await query.ToSingleAsync <T>()); }
/// <summary> /// 根据Where调用产生的查询条件获取单个实体对象 /// </summary> /// <returns></returns> public T ToSingle() { CPQuery query = GetSelectQuery(); return(query.ToSingle <T>()); }
/// <summary> /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作 /// </summary> /// <returns></returns> public async Task <int> UpdateAsync() { CPQuery query = GeUpdateQuery(); return(await query.ExecuteNonQueryAsync()); }
/// <summary> /// 根据指定的实体属性,生成INSERT语句,并执行数据库插入操作 /// </summary> /// <returns></returns> public int Insert() { CPQuery query = GetInsertQuery(); return(query.ExecuteNonQuery()); }
/// <summary> /// 根据指定的实体属性,生成DELETE查询条件,并执行数据库插入操作 /// </summary> /// <returns></returns> public int Delete() { CPQuery query = GetDeleteQuery(); return(query.ExecuteNonQuery()); }
/// <summary> /// 根据指定的实体属性,生成INSERT语句,并执行数据库插入操作 /// </summary> /// <returns></returns> public async Task <int> InsertAsync() { CPQuery query = GetInsertQuery(); return(await query.ExecuteNonQueryAsync()); }