Hi James,

there is no PK generated at all. That was the reason for my post.
Here is the generated SQL:

create table [SegmentGroup] (
  SegmentGroupId BIGINT IDENTITY NOT NULL,
   SegmentGroupName NVARCHAR(255) null,
   primary key (SegmentGroupId)
)
create table SegmentGroupSegments (
  SegmentGroupId BIGINT not null,
   SegmentId BIGINT not null
)
create table [Segment] (
  SegmentId BIGINT IDENTITY NOT NULL,
   SegmentName NVARCHAR(255) null,
   primary key (SegmentId)
)

and later the FKs:
alter table SegmentGroupSegments add constraint FK53B4C5B6C2AAA71A
foreign key (SegmentId) references [Segment]
alter table SegmentGroupSegments add constraint FK53B4C5B67B5AADE7
foreign key (SegmentGroupId) references [SegmentGroup]

This is, btw, what happens to ALL of my many-to-many relations.

thats it.

regards,
Darko


On 16 Jul., 11:05, James Gregory <[email protected]> wrote:
> What do you mean by "there is no PK" when you then say you don't want a
> surrogate key, is there a key or not?
> I'm pretty sure there's always a surrogate key on the many-to-many tables,
> that's just how NH generates the schema. I've had a look in the XSD and I
> can't see any attributes to specify a unique constraint. You could maybe use
> the check attribute on your collection, but I'm not sure it's for that
> purpose.
>
>
>
> On Thu, Jul 16, 2009 at 9:06 AM, Darko Konrad <[email protected]> wrote:
>
> > Hi guys,
>
> > I have a many-to-many relationship which is implemented as
> > bidirectional.
>
> > public class SegmentGroup
> > {
> >    public virtual long Id { get; protected set; }
> >    public virtual string SegmentGroupName { get; set; }
> >    public virtual IList<Segment> Segments { get; set; }
> > }
>
> > and
>
> > public class Segment
> > {
> >    public virtual long Id { get; protected set; }
> >    public virtual string SegmentName { get; set; }
> >    public virtual IList<SegmentGroup> SegmentGroups { get; set; }
> > }
>
> > I am using the automapping feature with the following conventions:
>
> > ....
> >  .ForTypesThatDeriveFrom<SegmentGroup>(m1 => m1.HasManyToMany(x =>
> > x.Segments)
> >                                      .WithTableName
> > ("SegmentGroupSegments")
> >                                      .Cascade.All()
> >                                      .WithParentKeyColumn
> > ("SegmentGroupId")
> >                                      .WithChildKeyColumn
> > ("SegmentId"))
>
> > .ForTypesThatDeriveFrom<Segment>(m1 => m1.HasManyToMany(x =>
> > x.SegmentGroups)
> >                                      .WithTableName
> > ("SegmentGroupSegments")
> >                                      .Cascade.All()
> >                                      .Inverse()
> >                                      .WithParentKeyColumn
> > ("SegmentGroupId")
> >                                      .WithChildKeyColumn
> > ("SegmentId"))
> > ....
>
> > The tables are generated correctly, however there is no PK (combined,
> > don't want a surrogate PK)
> > in the link table. Is that so by design? If yes, how do I at least set
> > UNIQUE constraint on
> > the combination of the 2 FKs?
>
> > Here are the generated hbms:
>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
> > access="">
> >  <class name="Fintexx.STAR.DataContract.SegmentGroup,
> > Fintexx.STAR.DataContract, Version=1.0.0.0, Culture=neutral,
> > PublicKeyToken=null" table="`SegmentGroup`" xmlns="urn:nhibernate-
> > mapping-2.2">
> >    <id name="Id" type="Int64" column="SegmentGroupId">
> >      <generator class="identity" />
> >    </id>
> >    <property name="SegmentGroupName" type="String">
> >      <column name="SegmentGroupName" />
> >    </property>
> >    <bag name="Segments" cascade="all" table="SegmentGroupSegments">
> >      <key column="SegmentGroupId" />
> >      <many-to-many column="SegmentId"
> > class="Fintexx.STAR.DataContract.Segment, Fintexx.STAR.DataContract,
> > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
> >    </bag>
> >  </class>
> > </hibernate-mapping>
>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
> > access="">
> >  <class name="Fintexx.STAR.DataContract.Segment,
> > Fintexx.STAR.DataContract, Version=1.0.0.0, Culture=neutral,
> > PublicKeyToken=null" table="`Segment`" xmlns="urn:nhibernate-
> > mapping-2.2">
> >    <id name="Id" type="Int64" column="SegmentId">
> >      <generator class="identity" />
> >    </id>
> >    <property name="SegmentName" type="String">
> >      <column name="SegmentName" />
> >    </property>
> >    <bag name="SegmentGroups" cascade="all" inverse="true"
> > table="SegmentGroupSegments">
> >      <key column="SegmentId" />
> >      <many-to-many column="SegmentGroupId"
> > class="Fintexx.STAR.DataContract.SegmentGroup,
> > Fintexx.STAR.DataContract, Version=1.0.0.0, Culture=neutral,
> > PublicKeyToken=null" />
> >    </bag>
> >  </class>
> > </hibernate-mapping>
>
> > THX,
> > Darko
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to