Entity framework actualiza una columna aumentando el valor actual en uno sin seleccionar




 Lo que quiero lograr es la consulta simple de SQL: **ACTUALIZAR TABLA COLUMNA = COLUMNA + 1** 

 ¿Hay alguna manera de hacer que suceda sin cargar todos los registros (miles) en la memoria primero y recorrer cada registro para incrementar la columna y luego volver a guardarla? 

 **EDITAR** 

 Intenté raw sql y funcionó. Tengo que decidir el proveedor de SQL de la cadena de conexión y el nombre del esquema de base de datos del contexto de conexión. Después de eso, usaré la consulta SQL correspondiente para actualizar la tabla. 

 Para SQL, parece ACTUALIZAR **schemaname.TABLE SET COLUMN = COLUMN + 1** . Para POSTGRESQL, tengo que poner entre comillas el nombre del esquema, el nombre de la tabla y el nombre de la columna: **ACTUALIZAR "schemaname". "TABLE" SET "COLUMN" = "COLUMN" + 1** .
Aquí está la solución. Puede utilizar el siguiente código: 


```
context.Table.Where(x => x.Field1 > 0).Update(y => new Table { Field2 = y.Field2 + 1 });

```
  Espero que ayude.
Para volver a agregar una tabla a su modelo, primero deberá eliminar la tabla de su modelo. (se puede ver una lista de tablas en el árbol [model.Store] (vea el panel ' **Explorador de modelos** '; puede abrirla desde el menú del botón derecho del mouse). Cuando ejecute 'Actualizar modelo desde la base de datos ...' la tabla aparecerá en la pestaña 'Agregar' en el primer paso del 'Asistente de actualización'. 

 Pasos para completar: 

1. Cierra tu modelo en Visual Studio.
2. Abra su archivo .edmx en un editor de texto.
3. Busque y elimine los elementos de la entidad XML (vea las notas a continuación).
4. Abre tu modelo en Visual Studio.
5. Haga clic en Actualizar modelo de la base de datos.

 Para eliminar todas las referencias a una tabla en su Modelo: 

* En el elemento 'EntityContainer', elimine todos los elementos secundarios 'EntitySet' que tienen el atributo 'Nombre' establecido en el valor [TableNameToReAdd].
* En el elemento 'EntityContainer', elimine todos los elementos secundarios 'AssociationSet' donde exista un elemento 'End' que tengan su atributo 'EntitySet' establecido en el valor [TableNameToReAdd].
* En el elemento 'EntityContainer', elimine todos los elementos secundarios 'EntityType' donde tengan el atributo 'Nombre' establecido en el valor [TableNameToReAdd].
* En el elemento 'EntityContainer', elimine todos los elementos secundarios de 'Asociación' donde exista un elemento 'Fin' que tenga su atributo 'Función' establecido en el valor [TableNameToReAdd]. Básicamente hay varias cosas que puedes hacer. 

* usando `SqlBulkCopy.WriteToServer` que no funciona muy bien junto con EF, sin embargo, existen varios intentos para crear extensiones
* utilizando un procedimiento almacenado que tomará un registro grande y lo dividirá de acuerdo con alguna lógica
* utilizando parámetros de procedimiento almacenado escritos en la tabla y realice una llamada al procedimiento almacenado (y varias `insert ... select` dentro del procedimiento almacenado)

 En general, prefiero la tercera opción. 

 Marque esta pregunta [Entity Framework Stored Procedure Tabla Valor Parámetro](https://stackoverflow.com/questions/8157345/entity-framework-stored-procedure-table-value-parameter) Intente colocar sus actualizaciones e inserciones en un archivo y luego cargar el archivo. Entiendo que Postgresql optimizará la carga del contenido del archivo. Siempre me ha funcionado aunque no he usado esa cantidad. vea este artículo <http://msdn.microsoft.com/en-us/library/bb738695.aspx> y <http://msdn.microsoft.com/en-us/library/bb386870.aspx> muestra acerca de la actualización con EF.   
 Y esta pregunta SO sobre ApplyCurrentValues: [ApplyCurrentValues en EF 4](https://stackoverflow.com/questions/2272325/applycurrentvalues-in-ef-4) para ver cómo trabajar con AppliCurrentValues. Los datawindows solo pueden actualizar 1 tabla a la vez. Por más que tengas varias tablas relacionadas solo podrás actualizar una de ellas.  
Ahora para hacer lo que deseas tendras que recorrer tu dw  y usar un insert o update si fuera el caso. o directamente un insert. Si quieres unir dos consultas has de hacer una consulta UNION, sólo disponible en Access en vista SQL, la manera más coómda es la siguiente:  
1.- Haz la primera, en vista diseño, o vista SQL, "SELECT ..." (cadenaSQL1)  
2.- Haz una segunda, en vista diseño, o vista SQL. La pones en vista SQL y copias en el portapapeles la cadena SQL (CadenaSQL2).  
3.- Vuelves a la primera consulta, y en vista SQL, escribes UNION y pegas a continuación el SQL de la segunda, guardala con el nombre que quieras, y ya está.  
Te ha de quedar algo así:  
CadenaSQL1 UNION CadenaSQL2  
Según las contultas que pones en el ejemplo, algo así:  
SELECT Count([Preguntas].[pregunta1]) AS [Porcentaje Antes pregunta 1] FROM preguntas WHERE (((preguntas.pregunta1)="Antes"))  
UNION SELECT COUNT(*) FROM preguntas  
Has de tener en cuenta algunas cosas tales como que  
- La estructura de campos de ambas consultas ha de ser igual  
- Usando el AS mantiene el nombre de campo del primer SQL  
- Que elimina valores duplicados al estilo del GROUP BY  
- Aunque sueloe ser necesario, te recomiendo quitar los ; al final de cada SQL, deja sólo el último o se lo pone Access solo. Es más intuitivo al leerlo, y puede dar algún problema según las versiones e instalaciones de Acess. Tienes que usar la función BUSCARV para que en función de un valor busques en la primera columna de tu otra tabla, e indicándole el número de columna consigas el dato deseado.

Otra opción es usar las funciones INDICE e COINCIDIR.

En Internet y Youtube hay muchos tutoriales, el propio Excel tiene también ejemplos.

Desafortunadamente con la información que proporcionas no veo como orientarte de manera más específica. Funcionaria con la fórmula concatenar, pero así la estas usando mal.  
Tendrías que en la columna c, concatenar a y b, y luego en otra celda:  
la formula =CONTAR.SI(C:C;"A0").  
La otra, para no concatenar en la columna C, seria hacer una fórmula personalizada.  
Si te interesa así, te digo como hacerla, si no sabes claro.  
Carlos Leal **Descargo de responsabilidad** : soy el propietario del proyecto [Bulk Operations](http://bulk-operations.net/) 

 En resumen, este proyecto supera las limitaciones de SqlBulkCopy al agregar características IMPRESCINDIBLES como generar un valor de identidad insertado. 

 Debajo del capó, utiliza SqlBulkCopy y un método similar como @Mr Moose answer. 


```
var bulk = new BulkOperation(connection)

// Output Identity Value
bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);

// Map Column
bulk.ColumnMappings.Add("Code");
bulk.ColumnMappings.Add("Name");
bulk.ColumnMappings.Add("Email");

bulk.BulkInsert(dt);

```
  **EDITAR:** Responder comentario 


>  ¿puedo simplemente obtener una lista IL o simplemente veo que está guardada en la tabla de clientes, pero no hay ninguna variable donde pueda obtenerla? ¿Pueden ayudarme con eso? Entonces, inserto en la tabla Orders.CustomerID 
> 
> 

 Depende, puede mantener una referencia a la fila de datos del cliente denominada `CustomerRef` en la `DataTable` pedido. 

 Entonces, una vez que fusionó a su cliente, puede completar fácilmente una columna `CustomerID` de la columna `CustomerRef` en su Tabla de datos de pedido. 

 Aquí hay un ejemplo de lo que estoy tratando de decir: <https://dotnetfiddle.net/Hw5rf3> no cursor, mientras lazo, o por el usuario función necesaria.sólo necesito ser creativo con for xml y trayectoria.[nota: esta solución sólo funciona en sql 2005 y posteriores. pregunta original no ha especificado la versión en uso.]create table #yourtable ([id] int, [name] char(1), [value] int) insert into #yourtable ([id],[name],[value]) values (1,'a',4) insert into #yourtable ([id],[name],[value]) values (1,'b',8) insert into #yourtable ([id],[name],[value]) values (2,'c',9) select [id], stuff(( select ', ' + [name] + ':' + cast([value] as varchar(max)) from #yourtable where (id = results.id) for xml path(''),type).value('(./text())[1]','varchar(max)') ,1,2,'') as namevalues from #yourtable results group by id drop table #yourtable