none
Problema al actualizar entidad con relación muchos a muchos RRS feed

  • Pregunta

  • Estimados,

    Estoy tratando de actualizar una entidad con relación de muchos a muchos y no me toma el cambio, es decir, me actualiza todos los campos menos la colección de muchos a muchos, acá va el ejemplo:

    Esto hago en la capa de presentación:

    ClienteNegocio cn = new ClienteNegocio();
    Cliente cliente = cn.Find(this.IdCliente);
    
    cliente.Nombre = "Un Nombre";
    cliente.Bandas.Add(banda1);
    cliente.Bandas.Add(banda2);
    cliente.Bandas.Add(banda3);
    
    cn.Update(cliente);

    Luego en la capa de negocio hago lo siguiente:

    public void Update(Cliente cliente)
    {
    	using (MegaStudioEntities contexto = new MegaStudioEntities())
    	{
    		foreach (Banda banda in cliente.Bandas)
    		{
    			contexto.Entry(banda).State = EntityState.Modified;
    		}
    
    		contexto.Clientes.Attach(cliente);
    		contexto.Entry(cliente).State = EntityState.Modified;
    		contexto.SaveChanges();
    	}
    }

    Y cuando me fijo en la base de datos no actualizo las bandas de cada cliente.

    ¿Alguna idea de que puede estar pasando?.

    Saludos y gracias!!


    lunes, 5 de noviembre de 2012 19:22

Todas las respuestas

  • mm que raro, el codigo parece estar correcto, cuando ahces esto

    cliente.Bandas.Add(banda1);

    esa banda1 de donde sale ? haces un find() para recuperar tambien el id de la misma ?

    sino la otra sera usar el profiler de sql server para poder ver las queries que ejecuta

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 6 de noviembre de 2012 12:55
  • Las bandas las cargo con un find, tal cual. De hecho me fije y tiene el ID cargado.

    Los únicos UPDATE que veo en el profiler son estos:

    exec sp_executesql N'update [dbo].[Bandas]
    set [NombreBanda] = @0, [IdSucursal] = @1, [FechaAlta] = @2, [FechaModificacion] = @3, [Borrado] = @4
    where ([IdBanda] = @5)
    ',N'@0 varchar(500),@1 int,@2 datetime2(7),@3 datetime2(7),@4 bit,@5 char(25)',@0='dede',@1=1,@2='0001-01-01 00:00:00',@3='2012-11-05 13:46:12.2670000',@4=0,@5='0000001-20121105134612265'

    exec sp_executesql N'update [dbo].[Clientes]
    set [Nombre] = @0, [Apellido] = @1, [Telefono] = @2, [Mail] = @3, [Direccion] = @4, [CodigoPostal] = @5, [IdPais] = null, [IdProvincia] = null, [Localidad] = @6, [FechaNacimiento] = null, [Nick] = null, [Clave] = null, [Borrado] = @7, [Observaciones] = @8, [IdSucursal] = @9, [FechaAlta] = @10, [FechaModificacion] = @11, [IdTipoCliente] = @12, [CUIT] = @13
    where ([IdCliente] = @14)
    ',N'@0 varchar(400),@1 varchar(400),@2 varchar(1000),@3 varchar(500),@4 varchar(1000),@5 varchar(100),@6 varchar(500),@7 bit,@8 varchar(max) ,@9 int,@10 datetime2(7),@11 datetime2(7),@12 smallint,@13 varchar(13),@14 char(25)',@0='fghgh 111',@1='',@2='',@3='',@4='',@5='',@6='',@7=0,@8='',@9=1,@10='2012-11-05 00:00:00',@11='2012-11-06 11:19:12.7751100',@12=2,@13='20-27108471-5',@14='0000001-20121105151233262'

    Lo raro es que en ningún momento toca la tabla ClientesBandas que es donde hago la relación muchos a muchos.
    ¿Tendrá algo que ver que traigo las bandas desde la interface de usuario y no esta Attachada al momento del UPDATE?
    Probé igual attacharla pero tampoco funciona, ¿alguna idea?

    Gracias!!

    martes, 6 de noviembre de 2012 14:27