LINQ es un lenguaje de consulta no para hacer updates o deletes.

Miraste el ejemplo que te di en el otro post ?  No es necesario hacer un
"Linq" para eso o un update en batch o algo asi.  Es necesario tener bien
mapeado el dominio.  El problema con lo que tienes tu es que estas tratando
de mapear una relacion m-to-m pero tal cosa no existe en objetos...

--------------Entidades -------------------

public partial class Entity1
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<RelationShip> Entities2{ get; set; }
    }

    public partial class Entity2
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual IList<RelationShip> Entities1 { get; set; }
    }

    public partial class RelationShip
    {
        public virtual Entity1 Entity1{ get; set; }
        public virtual Entity2 Entity2{ get; set; }
        public virtual DateTime? Date{ get; set; }

        public override int GetHashCode()
        {
            return Entity2.GetHashCode() + Entity1.GetHashCode();
        }
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            var other = obj as RelationShip;
            if (other == null) return false;

            return (Entity1 == other.Entity1
                   && Entity2 == other.Entity2
                   && Date == other.Date);
        }
    }

------------------------------ Mapeo ----------------------
<class name="Entity1">
    <id name="Id">
      <generator class="assigned"></generator>
    </id>
    <property name="Name"/>
    <bag name="Entities2" table="Relationships" inverse="true">
      <key column="IdEntity1"/>
      <composite-element class="RelationShip">
        <parent name="Entity1"/>
        <many-to-one name="Entity2" class="Entity2" column="IdEntity2"/>
        <property name="Date"/>
      </composite-element>
    </bag>
  </class>
  <class name="Entity2">
    <id name="Id">
      <generator class="assigned"></generator>
    </id>
    <property name="Name"/>
    <bag name="Entities1" table="Relationships" cascade="all">
      <key column="IdEntity2"/>
      <composite-element class="RelationShip">
        <parent name="Entity2"/>
        <many-to-one name="Entity1" class="Entity1" column="IdEntity1"/>
        <property name="Date"/>
      </composite-element>
    </bag>
  </class>

------------------- Program................................................

class Program
    {
        static void Main(string[] args)
        {
            var conf = new Configuration().Configure();
            new SchemaExport(conf).Create(true, true);
            using (var sf = conf.BuildSessionFactory())
            {
                using (var s = sf.OpenSession())
                {
                    using (var tx = s.BeginTransaction())
                    {
                        var dennis = new Entity1 { Id = 1, Name = "dennis"
};
                        var carro = new Entity2 {Id = 1, Name = "carro"};

                        var relationship1 = new List<RelationShip> {
                            new RelationShip{ Entity1 = dennis, Entity2 =
carro, Date = DateTime.Now}};
                        var relationship2 = new List<RelationShip> {
                            new RelationShip{ Entity1 = dennis, Entity2 =
carro, Date = DateTime.Now}};

                        dennis.Entities2 = relationship1;
                        carro.Entities1 = relationship2;

                        s.Save(dennis);
                        s.Save(carro);
                        tx.Commit();
                    }
                }

                using (var s = sf.OpenSession())
                {
                    using (var tx = s.BeginTransaction())
                    {
                        var alba = new Entity1 { Id = 2, Name = "alba" };
                        var carro  = s.Get<Entity2>(1);

                        alba.Entities2 = new List<RelationShip> {};
                        carro.Entities1.First().Entity1 = alba;

                        s.Save(alba);
                        tx.Commit();
                    }
                }
            }
        }
    }

2011/9/5 Dennis Alba <[email protected]>

> el ejemplo lo tengo puesto en el post que subi anteriormente "Update
> con linq de NHibernate "
> imagina que tengo 3 clases
> CA
> int IdA
> string NombA
>
> CB
> int IdB
> string NombB
>
> C-AB
> CA instA
> CB instB
> datetime Fecha
>
> estas son las tres clases, como puedes ver C-AB es una clase que tiene
> dos entidades una de CA y otra de CB y no tiene un campo que sea la
> llave primaria pues en el mapeo, estas instancias seran FK pero su
> combinacion sera PK, osea esta clase creara una tabla que simula una
> relacion m-m entre esas dos clases. Pues bien el update que necesito
> ahcer es el siguiente
> supon que tengo insertadas ya en las tablas los siguientes datos
> CA IdA NombA
>      1    ariel
>      2    maria
> CB idB NombB
>      1    varon
>      2   hembra
>
> C_AB  instA    instB   Fecha
>            1          1       05/09/2011
> como puedes ver la informacion en C-AB es que ariel(1 en instA) es
> varon(1 en instB)
> pero yo quiero actualizar esta tabla y que quede de la siguiente forma:
>
> C_AB  instA    instB   Fecha
>            1          2       05/09/2011
> ahora estaria diciendo que ariel(1 en instA) es hembra(2 en instB)
> en linq 2 NHiberntae no puedo hacer esto pues el metodo Update que
> tiene para que funcione se basa en las llaves primarias, pero es que
> presisamente unas de las cosas que quiero modifica es las llaves
> primarias, es por ello que necesito programar yo la query. Espero
> entiendas el entorno del fenomeno
> Gracias
>
>
>
> El 05/09/11, Carlos Peix <[email protected]> escribió:
> > Que tipo de update querrias hacer?
> >
> > Nunca me he tenido esta necesidad, con un ORM. Podrias dar un ejemplo?
> >
> > ----------------------------------
> > Carlos Peix
> >
> > 2011/9/5 Banzai <[email protected]>
> >
> >> Saludos tropa:
> >> Dado que no he podido encontrar la forma en que por "linq 2
> >> NHibernate" crear un UPDATE no me qeda mas remedio que hacer esta
> >> consulta por HQL para seguir garantizando que estas operaciones sean
> >> independientes del SGBD. Por tal motivo la pregunta es la siguiente.
> >> Sabe alguien como se declara una consulta HQL (Tipo UPDATE) y a quien
> >> se debe llamar para que implemente y obtenga el resultado de dicha
> >> consulta??
> >> Muchas gracias a todos
> >>
> >> --
> >> Para escribir al Grupo, hágalo a esta dirección:
> >> [email protected]
> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> > [email protected]
> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a