public virtual int Delete <TEntity>(TEntity entity) { Utils.CheckNull(entity); TypeDescriptor typeDescriptor = TypeDescriptor.GetDescriptor(entity.GetType()); EnsureEntityHasPrimaryKey(typeDescriptor); MappingMemberDescriptor keyMemberDescriptor = typeDescriptor.PrimaryKey; MemberInfo keyMember = typeDescriptor.PrimaryKey.MemberInfo; var keyVal = keyMemberDescriptor.GetValue(entity); if (keyVal == null) { throw new ChloeException(string.Format("The primary key '{0}' could not be null.", keyMember.Name)); } DbExpression left = new DbColumnAccessExpression(typeDescriptor.Table, keyMemberDescriptor.Column); DbExpression right = new DbParameterExpression(keyVal); DbExpression conditionExp = new DbEqualExpression(left, right); DbDeleteExpression e = new DbDeleteExpression(typeDescriptor.Table, conditionExp); return(this.ExecuteSqlCommand(e)); }
public override int Delete <TEntity>(TEntity entity, string table) { PublicHelper.CheckNull(entity); TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity)); PublicHelper.EnsureHasPrimaryKey(typeDescriptor); Dictionary <PropertyDescriptor, object> keyValueMap = new Dictionary <PropertyDescriptor, object>(typeDescriptor.PrimaryKeys.Count); foreach (PropertyDescriptor keyPropertyDescriptor in typeDescriptor.PrimaryKeys) { object keyVal = keyPropertyDescriptor.GetValue(entity); keyValueMap.Add(keyPropertyDescriptor, keyVal); } DbTable dbTable = table == null ? typeDescriptor.Table : new DbTable(table, typeDescriptor.Table.Schema); PropertyDescriptor timestampProperty = typeDescriptor.PropertyDescriptors.Where(a => a.IsTimestamp()).FirstOrDefault(); if (timestampProperty != null) { object timestampValue = timestampProperty.GetValue(entity); if (timestampValue != null) { keyValueMap[timestampProperty] = timestampValue; } } DbExpression conditionExp = PrimaryKeyHelper.MakeCondition(keyValueMap, dbTable); DbDeleteExpression e = new DbDeleteExpression(dbTable, conditionExp); return(this.ExecuteNonQuery(e)); }
/// <summary> /// 删除 /// </summary> /// <param name="entity"></param> /// <returns></returns> public int Remove(TEntity entity) { Checks.NotNull(entity, "entity"); TypeDescriptor typeDescriptor = TypeDescriptor.GetDescriptor(entity.GetType()); MappingMemberDescriptor keyMemberDescriptor = typeDescriptor.PrimaryKey; MemberInfo keyMember = typeDescriptor.PrimaryKey.MemberInfo; if (keyMemberDescriptor == null) { throw new SZORMException(string.Format("该表没有主键不允许这样删除.")); } var keyVal = keyMemberDescriptor.GetValue(entity); if (keyVal == null) { throw new SZORMException(string.Format("{0}主键字段不允许为空.", keyMember.Name)); } DbExpression left = new DbColumnAccessExpression(typeDescriptor.Table, keyMemberDescriptor.Column); DbExpression right = new DbParameterExpression(keyVal); DbExpression conditionExp = new DbEqualExpression(left, right); DbDeleteExpression e = new DbDeleteExpression(typeDescriptor.Table, conditionExp); IDbExpressionTranslator translator = this.DbContext.DatabaseProvider.CreateDbExpressionTranslator(); List <DbParam> parameters; string sql = translator.Translate(e, out parameters); return(this.DbContext.ExecuteNoQuery(sql, parameters.ToArray())); }
public override DbExpression Visit(DbDeleteExpression exp) { this._sqlBuilder.Append("DELETE FROM "); this.AppendTable(exp.Table); this.BuildWhereState(exp.Condition); return(exp); }
public override DbExpression Visit(DbDeleteExpression exp) { base.Visit(exp); if (exp is MySqlDbDeleteExpression) { this.SqlBuilder.Append(" LIMIT ", (exp as MySqlDbDeleteExpression).Limits.ToString()); } return(exp); }
public virtual int Delete <TEntity>(Expression <Func <TEntity, bool> > condition) { Utils.CheckNull(condition); TypeDescriptor typeDescriptor = TypeDescriptor.GetDescriptor(typeof(TEntity)); DbExpression conditionExp = typeDescriptor.Visitor.VisitFilterPredicate(condition); DbDeleteExpression e = new DbDeleteExpression(typeDescriptor.Table, conditionExp); return(this.ExecuteSqlCommand(e)); }
public override DbExpression Visit(DbDeleteExpression exp) { if (!(exp is MySqlDbDeleteExpression)) { return(base.Visit(exp)); } var ret = new MySqlDbDeleteExpression(exp.Table, this.MakeNewExpression(exp.Condition)); ret.Limits = (exp as MySqlDbDeleteExpression).Limits; return(ret); }
protected virtual async Task <int> Delete <TEntity>(Expression <Func <TEntity, bool> > condition, string table, bool @async) { PublicHelper.CheckNull(condition); TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity)); DbTable dbTable = typeDescriptor.GenDbTable(table); DefaultExpressionParser expressionParser = typeDescriptor.GetExpressionParser(dbTable); DbExpression conditionExp = expressionParser.ParseFilterPredicate(condition); DbDeleteExpression e = new DbDeleteExpression(dbTable, conditionExp); return(await this.ExecuteNonQuery(e, @async)); }
/// <summary> /// 条件删除 /// </summary> /// <param name="condition"></param> /// <returns></returns> public int Remove(Expression <Func <TEntity, bool> > condition) { Checks.NotNull(condition, "condition"); TypeDescriptor typeDescriptor = TypeDescriptor.GetDescriptor(typeof(TEntity)); DbExpression conditionExp = typeDescriptor.Visitor.VisitFilterPredicate(condition); DbDeleteExpression e = new DbDeleteExpression(typeDescriptor.Table, conditionExp); IDbExpressionTranslator translator = this.DbContext._dbContextServiceProvider.CreateDbExpressionTranslator(); List <DbParam> parameters; string sql = translator.Translate(e, out parameters); return(this.DbContext.ExecuteNoQuery(sql, parameters.ToArray())); }
public virtual int Delete <TEntity>(Expression <Func <TEntity, bool> > condition, string table) { Utils.CheckNull(condition); TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity)); DbTable explicitDbTable = null; if (table != null) { explicitDbTable = new DbTable(table, typeDescriptor.Table.Schema); } DefaultExpressionParser expressionParser = typeDescriptor.GetExpressionParser(explicitDbTable); DbExpression conditionExp = expressionParser.ParseFilterPredicate(condition); DbDeleteExpression e = new DbDeleteExpression(explicitDbTable ?? typeDescriptor.Table, conditionExp); return(this.ExecuteNonQuery(e)); }
protected override Expression VisitDelete(DbDeleteExpression delete) { this.Write("DELETE FROM "); bool saveHideTable = this.HideTableAliases; bool saveHideColumn = this.HideColumnAliases; this.HideTableAliases = true; this.HideColumnAliases = true; this.VisitSource(delete.Table); if (delete.Where != null) { this.WriteLine(Indentation.Same); this.Write("WHERE "); this.Visit(delete.Where); } this.HideTableAliases = saveHideTable; this.HideColumnAliases = saveHideColumn; return(delete); }
protected override async Task <int> Delete <TEntity>(TEntity entity, string table, bool @async) { PublicHelper.CheckNull(entity); TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity)); PublicHelper.EnsureHasPrimaryKey(typeDescriptor); PairList <PrimitivePropertyDescriptor, object> keyValues = new PairList <PrimitivePropertyDescriptor, object>(typeDescriptor.PrimaryKeys.Count); foreach (PrimitivePropertyDescriptor keyPropertyDescriptor in typeDescriptor.PrimaryKeys) { object keyValue = keyPropertyDescriptor.GetValue(entity); PrimaryKeyHelper.KeyValueNotNull(keyPropertyDescriptor, keyValue); keyValues.Add(keyPropertyDescriptor, keyValue); } PrimitivePropertyDescriptor rowVersionDescriptor = null; if (typeDescriptor.HasRowVersion()) { rowVersionDescriptor = typeDescriptor.RowVersion; var rowVersionValue = typeDescriptor.RowVersion.GetValue(entity); this.EnsureRowVersionValueIsNotNull(rowVersionValue); keyValues.Add(typeDescriptor.RowVersion, rowVersionValue); } DbTable dbTable = PublicHelper.CreateDbTable(typeDescriptor, table); DbExpression conditionExp = PublicHelper.MakeCondition(keyValues, dbTable); DbDeleteExpression e = new DbDeleteExpression(dbTable, conditionExp); int rowsAffected = await this.ExecuteNonQuery(e, @async); if (rowVersionDescriptor != null) { PublicHelper.CauseErrorIfOptimisticUpdateFailed(rowsAffected); } return(rowsAffected); }
public virtual int Delete <TEntity>(TEntity entity, string table) { Utils.CheckNull(entity); TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(entity.GetType()); PublicHelper.EnsureHasPrimaryKey(typeDescriptor); Dictionary <PropertyDescriptor, object> keyValueMap = new Dictionary <PropertyDescriptor, object>(); foreach (PropertyDescriptor keyPropertyDescriptor in typeDescriptor.PrimaryKeys) { object keyVal = keyPropertyDescriptor.GetValue(entity); keyValueMap.Add(keyPropertyDescriptor, keyVal); } DbTable dbTable = table == null ? typeDescriptor.Table : new DbTable(table, typeDescriptor.Table.Schema); DbExpression conditionExp = MakeCondition(keyValueMap, dbTable); DbDeleteExpression e = new DbDeleteExpression(dbTable, conditionExp); return(this.ExecuteSqlCommand(e)); }
public override DbExpression Visit(DbDeleteExpression exp) { return(exp); }
public override DbExpression Visit(DbDeleteExpression exp) { return(exp.Accept(this._generator)); }
public abstract T Visit(DbDeleteExpression exp);