Bitte sehen Sie den Code unten:einen Composite-Primärschlüssel in der Verknüpfungstabelle mit NHibernate
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;
namespace NHibernateCodeMapping
{
public class Person
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Sport> sports { get; set; }
public Person()
{
sports = new List<Sport>();
}
}
public class Sport
{
public virtual Guid Id { get; set; }
public virtual string Description { get; set; }
public virtual IList<Person> people { get; set; }
public Sport()
{
people = new List<Person>();
}
}
public class PersonMap : ClassMapping<Person>
{
public PersonMap()
{
Id<Guid>(x => x.Id);
Property<string>(x => x.Name);
Bag(x => x.sports, collectionMapping =>
{
collectionMapping.Table("PersonSports");
collectionMapping.Cascade(Cascade.None);
collectionMapping.Key(keyMapper => keyMapper.Column("PersonId"));
//collectionMapping.Key(k => k.Column("SportId"));
},
map => map.ManyToMany(p => p.Column("SportId")));
}
}
public class SportMap : ClassMapping<Sport>
{
public SportMap()
{
Id<Guid>(x => x.Id);
Property<string>(x => x.Description);
Bag(x => x.people, collectionMapping =>
{
collectionMapping.Table("PersonSports");
collectionMapping.Key(keyMapper => keyMapper.Column("SportId"));
collectionMapping.Cascade(Cascade.None);
//collectionMapping.Key(k => k.Column("PersonId"));
},
map => map.ManyToMany(p => p.Column("PersonId")));
}
}
}
Es funktioniert wie ich erwarten würde das heißt drei Tabellen erstellt: Person; Sport und PersonSport. PersonSport ist der Knotenpunkt, um die Beziehung zwischen Mensch und Sport zu unterstützen.
Wie erstelle ich einen zusammengesetzten Primärschlüssel für die PersonSport-Tabelle (Personid, SportId)? Bitte sieh dir die zwei Zeilen an, die auskommentiert sind, was zeigt, was ich bisher versucht habe.