Pregunta

Tengo un DataGridView y lista adjunta de los empleados para ello, algo como esto:

IQueryable<Employee> data = (from em in db.Employees
                             where em.StationID == stationID
                             select em);
dgvView.DataSource = data;


Ahora quiero borrar empleado específico por fila seleccionada en DataGridView:

using (PetrolNetwork db = new PetrolNetwork())
                {
                    Employee empl = (Employee)dgvView.CurrentRow.DataBoundItem;
                    db.Employees.DeleteOnSubmit(empl);
                    db.SubmitChanges();
                }

No es sorpresa, que tengo excepción " No se puede eliminar una entidad que no ha sido fijada. "
Si se sustituyen por este código:

Employee employee = (from em in db.Employees
                                         where em.ID == empl.ID
                                         select em).Single();
                    db.Employees.DeleteOnSubmit(employee);
                    db.SubmitChanges(); 

todo el trabajo correctamente, y en SQLProfiler podemos ver una extra seleccione la base de datos para recuperar nuestra empleado específico, y luego borrar de la declaración.
Cómo puedo eliminar mi empleado, cuando llegué desde DataBoundItem de DataGridView sin ningún tipo de sentencias de selección adicionales? Un enfoque que puedo ver es sproc personalizado para eliminar por ID. Puede haber es cualquier otro mejores enfoques?

¿Fue útil?

Solución

Por desgracia con LinqToSql, es necesario seleccionar el elemento que desea eliminar antes de eliminarlo.

El uso de procedimientos almacenados como usted ha mencionado es una opción.

Otro es el uso de L2S para ejecutar sentencias SQL personalizadas .

result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top