Usuario
Controlador asp net mvc , error en el find

Pregunta
-
Buenas , mediante EF y mvc5 he creado este controlador.
El modelo que tengo es esteEl código generado por el controlador por defecto solo incluye el primer parámetro que es id , yo le he añadido weblogin y tienda
Y aquí esta el error que no se bien que me dice.
Gracias
- Cambiado Joyce_AC miércoles, 10 de mayo de 2017 21:25
Todas las respuestas
-
-
hola
Quien define el Find() del cliente, quien genera ese metodo ?
porque no usas linq, como ser
Clientes clientes = db.Clientes.FirstOrDefault(x=> x.id == id && x.weblogin == weblogin && x.tienda == tienda);
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
hola
Quien define el Find() del cliente, quien genera ese metodo ?
porque no usas linq, como ser
Clientes clientes = db.Clientes.FirstOrDefault(x=> x.id == id && x.weblogin == weblogin && x.tienda == tienda);
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
ArgentinaEse método lo he creado con la opción de agregar --> controlador -->Controlador de MVC5 que usa vistas de entity framework
Y originalmente me ha creado esto
// GET: Clientes/Delete/5 public ActionResult Delete(string id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Clientes clientes = db.Clientes.Find(id); if (clientes == null) { return HttpNotFound(); } return View(clientes); }
Yo lo que he hecho es añadirle 2 parametros más (negrita)
// GET: Clientes/Delete/5 public ActionResult Delete(string id, string weblogin, Byte tienda) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Clientes clientes = db.Clientes.Find(id, weblogin, tienda); if (clientes == null) { return HttpNotFound(); } return View(clientes); }
- Editado golfgti6 miércoles, 10 de mayo de 2017 12:37
-
-
hola
Pero son key values, tu no tienes multiples keys en esa entidad, no aplica lo que estas queriendo realizar
el Find() busca por la primary key de la tabla, es un array porque puede que tengas una entidad con claves compuestas
para lo que quires realizar no aplica ese metodo, debes usar linq
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP miércoles, 10 de mayo de 2017 13:49
-
-
mm entonces tenias una key compuesta, entiendo que entonces deberia funcionar, pero la verdad que al usar un orm no se recomienda este tipo de construcciones, son para problema
se suele crear una key unica secuencial, y despues si lo necesitas una constraint Unique que agrupe estas 3 columnas para evitar duplicados, pero no serian la key de la tabla
si recomiendaria apliques linq en la busqueda
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Cambiar la firma de tu metodo Delete a:
Delete(string id, string weblogin,int tienda)
Si la respuesta es correcta, marcala como correcta.
Tambien puedes votar como util si te fue de ayuda
MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
Pedro Marquez - Venezuela -
Cambiar la firma de tu metodo Delete a:
Delete(string id, string weblogin,int tienda)
Si la respuesta es correcta, marcala como correcta.
Tambien puedes votar como util si te fue de ayuda
MCPD Windows Developer 4/MVA GOLD/DCE 5 ESTRELLAS PLATINO
Pedro Marquez - VenezuelaLo he probado tal como este código
public ActionResult Delete(string id, string weblogin, int tienda) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Clientes clientes = db.Clientes.Find(id, weblogin, tienda); if (clientes == null) { return HttpNotFound(); } return View(clientes); }
Pero el error persiste
Se produjo una excepción de tipo 'System.ArgumentException' en EntityFramework.dll pero no se controló en el código del usuario Información adicional: El tipo de uno de los valores de clave principal no coincidía con el tipo definido en la entidad. Vea la excepción interna para obtener detalles.
Gracias,
-
Hola golfgti6
Verificando tu tabla que nos mostrabas arriba, el error se produce porque no le estás pasando el tipo de dato correcto, verifica:
Delete(int id, string weblogin,int tienda) // ya que tu id en tu tabla es int, tu weblogin string y el id de tienda int
Saludos
Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.
-
-
Aconsejaria que no te compliques con el Find() si puede usar linq, obteniendo el mismo resultado
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Aconsejaria que no te compliques con el Find() si puede usar linq, obteniendo el mismo resultado
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
ArgentinaGracias , lo he puesto con linq tal como me dijiste anteriormente.
Solo me gustaría ver el problema porque no funciona tal cual , si lo llegamos a resolver jeje , es por aprender.
Gracias,
-
-
>>Solo me gustaría ver el problema porque no funciona tal cual , si lo llegamos a resolver jeje , es por aprender.
el tema es que si es por aprender deberias empezar por recordar no hacer uso de claves compuestas cuando uses un orm, es para problemas
como comente una clave simple y despues una constraint unique sobre estos campos
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
>>Solo me gustaría ver el problema porque no funciona tal cual , si lo llegamos a resolver jeje , es por aprender.
el tema es que si es por aprender deberias empezar por recordar no hacer uso de claves compuestas cuando uses un orm, es para problemas
como comente una clave simple y despues una constraint unique sobre estos campos
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
ArgentinaHe usado una clave compuesta ya que para el diseño que tengo quiero conseguir esto
login tienda idCliente
central 1 1
central 1 2
Es decir para el login central con tienda 1 tengo el campo idCliente desde el 1 hasta el XXXX
Pero para el login central con tienda 2 quiero que el idCliente empieze desde el 1 hasta el XXXX
Y si luego hay otro login que es logintest con tienda 1 quiero que el idCliente empieze desde el 1 hasta el XXXX
Ya que el login central , tienda 1 , idCliente 1 es distinto (para mi lógica de negocio) de login central , tienda 2 , idCliente 2
No se si con el diseño que puse anteriormente esto es asin o ando equivocado.
Gracias
-
hola
>>Ya que el login central , tienda 1 , idCliente 1 es distinto (para mi lógica de negocio) de login central , tienda 2 , idCliente 2
ok pero el uso de una clave compuesta no es la unica alternativa, podrias definir una key simple y luego un constraint unique entre estos campos
con esto evitas el problema con el orm
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina