I want to map a class that has a property of type ICollection<> using 
NHibernate mapping by code. The code below works. But I don't like the 
extra Person property within CarSet to make the mapping work.

 
public class PersonSet
    {        
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual ICollection<CarSet> Cars { get; set; }
    }


    public class CarSet
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual PersonSet Person { get; set; }
    }




    public class PersonSetMap : ClassMapping<PersonSet>
    {
        public PersonSetMap()
        {
            Id(x => x.Id, m=>m.Generator(Generators.Identity));
            Property(x=>x.Name);
            Set(x => x.Cars, c =>
                {
                    c.Key(k =>
                        {
                            k.Column("PersonId");
                        });
                     c.Cascade(Cascade.Persist);
                    c.Lazy(CollectionLazy.NoLazy);
                }, r =>
                    {
                        r.OneToMany();
                    }
                );
        }
    }


    public class CarSetMap : ClassMapping<CarSet>
    {
        public CarSetMap()
        {
            Id(x => x.Id, m => m.Generator(Generators.Identity));
            Property(x => x.Name);
            ManyToOne(x => x.Person, m =>
            {
                m.Column("PersonId");
                m.Cascade(Cascade.None);
                m.NotNullable(true);
            });


        }
    }


      public void Save(){


       using (var session = Cfg.Session)
            using (var tx = session.BeginTransaction())
            {
               PersonSet John = new PersonSet { Name = PersonName.John };
               John.Cars = new List<CarSet> { 
                new CarSet { Name = CarnName.BMW,Person = John},
                  new CarSet { Name = CarnName.BM,Person = John }};
                session.Save(entity);
                tx.Commit();
            }


    }

 The code above generates SQL script below:

 
 create table PersonSet (
      Id INT IDENTITY NOT NULL,
     Name NVARCHAR(255) null,
     primary key (Id)
  )


  create table CarSet (
      Id INT IDENTITY NOT NULL,
     Name NVARCHAR(255) null,
     PersonId INT not null,
     primary key (id)
  )


  alter table CarSet
      add constraint FKF967D6489A220265
      foreign key (PersonId)
      references PersonSet
  

  
What I want is to generate SQL script with difference shown below, and keep 
the rest the same:

 create table CarSet (     
     Name NVARCHAR(255) null,
     PersonId INT not null,


  )

Ideally I want the CarSet like this instead:

public class CarSet
{
    public virtual int PersonId { get; set; }
    public virtual string Name { get; set; }


}


Any idea?

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to