也許有一點(或很多)晚,但儘管如此,
我簡化您的例子是這樣的:
public class Tournament
{
public virtual Guid Id { get; private set; }
private readonly ISet<Player> players;
public Tournament()
{
players = new HashedSet<Player>();
}
public virtual ISet<Player> Players
{
get { return players; }
}
public virtual void AddPlayer(Player player)
{
players.Add(player);
}
}
public class Player
{
public virtual Guid Id { get; private set; }
private readonly ISet<Tournament> tournaments;
public Player()
{
tournaments = new HashedSet<Tournament>();
}
public virtual ISet<Tournament> Tournaments
{
get { return tournaments; }
}
public virtual void AddTournament(Tournament tournament)
{
tournaments.Add(tournament);
}
}
public class TournamentMap : ClassMap<Tournament>
{
public TournamentMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasManyToMany<Player>(x => x.Players)
.AsSet().Access.AsLowerCaseField()
.Cascade.SaveUpdate();
}
}
public class PlayerMap : ClassMap<Player>
{
public PlayerMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasManyToMany<Tournament>(x => x.Tournaments)
.Access.AsLowerCaseField()
.AsSet()
.Cascade.SaveUpdate().Inverse();
}
}
第一測試看起來像:
[Test]
public void CanSavePlayerAttachedToTournament()
{
Player player = new Player();
Tournament tournament = new Tournament();
player.AddTournament(tournament);
tournament.AddPlayer(player);
Session.Save(tournament);
Session.Flush();
}
併產生以下sql:
NHibernate:INSERT INTO「Tournament」(Id)VALUES(@ p0); NHibernate:INSERT INTO「Player」(Id)VALUES(@ p0); @ p0 ='65559bba-8603-4874-8a8f-9bf4018596df' NHibernate:INSERT INTO PlayerToTournament(Tournament_id,Player_id)VALUES(@ p0,@ p1); @ p0 ='549e107c-1339-4fab-8960-9bf4018596e8' @ P0 = '65559bba-8603-4874-8a8f-9bf4018596df',@ P1 = '549e107c-1339-4fab-8960-9bf4018596e8'
第二測試看起來像:
[Test]
public void CanSaveTounamentAttachedToPlayer()
{
Player player = new Player();
Tournament tournament = new Tournament();
player.AddTournament(tournament);
tournament.AddPlayer(player);
Session.Save(player);
Session.Flush();
}
和產生以下sql:
NHibernate:INSERT INTO「Player」(Id)VALUES(@ p0); NHibernate:INSERT INTO「Tournament」(Id)VALUES(@ p0); @ p0 ='35c078c5-1102-4c63-91ca-9bf40185971c' NHibernate:INSERT INTO PlayerToTournament(Tournament_id,Player_id)VALUES(@ p0,@ p1); @ p0 ='367898cf-5835-4e1b-9d7d-9bf40185971c' @ p0 ='367898cf-5835-4e1b-9d7d-9bf40185971c',@ p1 ='35c078c5-1102-4c63-91ca-9bf40185971c'
請顯示您用於將玩家和錦標賽保存到數據庫的代碼 – sirrocco 2009-01-11 12:46:13