/// <summary> /// 删除, Version控制 /// </summary> public DatabaseResult Delete <T>(T item, TransactionContext transContext) where T : DatabaseEntity, new() { if (!item.IsValid()) { return(DatabaseResult.Fail("entity check failed.")); } DatabaseEntityDef entityDef = _entityDefFactory.GetDef <T>(); if (!entityDef.DatabaseWriteable) { return(DatabaseResult.NotWriteable()); } long id = item.Id; long version = item.Version; WhereExpression <T> condition = Where <T>().Where(t => t.Id == id && t.Deleted == false && t.Version == version); try { IDbCommand dbCommand = _sqlBuilder.CreateDeleteCommand(condition, "default"); long rows = _databaseEngine.ExecuteCommandNonQuery(transContext?.Transaction, entityDef.DatabaseName, dbCommand); if (rows == 1) { return(DatabaseResult.Succeeded()); } else if (rows == 0) { return(DatabaseResult.NotFound()); } throw new Exception("Multiple Rows Affected instead of one. Something go wrong."); } catch (DbException ex) { //_logger.LogCritical(ex.Message); return(DatabaseResult.Fail(ex)); } }