2009-01-02 6 views
6

Estoy usando LINQ to SQL para actualizar mi base de datos. Estoy insertando muchos registros, y cuando invoco SubmitChanges(), LINQ to SQL ejecuta una inserción y una declaración de selección para cada objeto. Realmente no me importa actualizar mis objetos luego de que se hayan insertado en la base de datos.Detener LINQ to SQL desde la ejecución de las instrucciones select después de insertar

¿Sabe usted que puedo evitar que LINQ to SQL emita las sentencias select después de las instrucciones de inserción? Esto debería hacer que mi aplicación sea mucho más rápida.

Respuesta

0

No puedo recordar la configuración ahora, pero en el diseñador, en las propiedades de una columna, tiene algunas configuraciones de "actualización".

6

Está buscando ColumnAttribute.AutoSync. Si está utilizando el diseñador, marque cada columna para una propiedad de sincronización automática y configúrelo en Nunca.

Edit: Ok, eso no funcionó para usted. ¡Prepárate para hackear mapas!

cuando inserto con alguna columna de clave principal autogenerado, consigo este SQL:

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] 

Según entiendo su petición, que no quieren que SELECT

Intento 1: Fui a la campo de clave principal y establecer autogenerado en falso. Esto provocó una excepción Sql "No se puede insertar un valor explícito para la columna de identidad en la tabla 'TableName' cuando IDENTITY_INSERT está establecido en OFF." En otras palabras, linq especificó un valor para esa columna.

Intento 2: Eliminé las columnas autogeneradas del diseñador. Esto causó que Linq me diera una Excepción de Operación Inválida: "No se puede realizar Crear, Actualizar o Eliminar operaciones en 'Tabla (TableName)' porque no tiene clave primaria."

Intento 3: borré las columnas autogeneradas del diseñador, luego marqué otra columna como clave principal. Aunque esta columna no es una clave principal en la base de datos, DataContext de LINQ la usará para rastrear la identidad de la fila. Debe ser único para los registros observados de un DataContext dado.

Este tercer intento genera el siguiente código SQL (que es lo que pide)

INSERT INTO [dbo].[TableName](fieldlist) 
VALUES (@p0, @p1, @p2, @p3, @p4) 
+0

Gracias por la sugerencia. Lo hice, pero el generador de perfiles aún muestra una selección después de las dos inserciones y actualizaciones. No sé por qué. –

+0

Tengo dos columnas marcadas que tienen AutoGeneratedValue establecido en verdadero. La instrucción select selecciona estas dos columnas después de las inserciones y actualizaciones, aunque AutoSync está configurado en falso. –

+2

Parece una cantidad ridícula de trabajo por algo que hubiera funcionado de la manera correcta la primera vez que utilicé ADO.Net – Jasmine

0

tuve este problema con un proyecto una vez. Simplemente utilicé el contexto. Ejecutar comando ({cadena sql aquí.}). Esto fue para una inserción que estaba causando problemas de rendimiento. La solución más fácil, fácil de ver y mantener en lugar de cavar a través del modelo en mi opinión.