我一直在努力让以下工作几个小时。但我似乎无法找出我在这里做错了什么。
我正在使用 Fluent Nhibernate 自动映射器(和一些覆盖)来让这个结构工作。
public class Game:IKeyed<Guid>
{
public virtual Guid Id { get; set; }
//properties
}
public class Team : IKeyed<Guid>
{
public virtual Guid Id { get; set; }
//Other properties
public virtual IList<GameTeam> GameTeams { get; set; }
}
public class GameTeam:IKeyed<GameTeamId>
{
public virtual GameTeamId Id { get; set; }
public virtual int CurrentRound { get; set; }
public virtual IList<GameTeamRound> Rounds { get; set; }
}
public class GameTeamId
{
public virtual Game Game { get; set; }
public virtual Team Team { get; set; }
//equals stuff
}
public class GameTeamRound : IKeyed<GameTeamRoundId>
{
public virtual GameTeamRoundId Id { get; set; }
//Properties
public virtual IList<TeamRoundDecision> Decisions { get; set; }
}
public class GameTeamRoundId
{
public virtual GameTeam GameTeam { get; set; }
public virtual int RoundNumber { get; set; }
}
GameTeam 关系是我可以管理的。但是 GameTeamRound 链接目前有点过分。:) 我什至有更深的层次。但我不想让问题变得更复杂。
我正在使用 NHibernate 为我生成我的数据库。所以我从我的模型开始。为了完成这项工作,我使用了一些映射覆盖来确保这些复合键正常工作。
public class GameTeamOverride : IAutoMappingOverride<GameTeam>
{
public void Override(AutoMapping<GameTeam> mapping)
{
//mapping.IgnoreProperty(gt => gt.Id);
mapping.CompositeId(gt => gt.Id)
.KeyProperty(id => id.Game.Id, "GameId")
.KeyProperty(id => id.Team.Id, "TeamId");
}
}
public class GameTeamRoundOverride : IAutoMappingOverride<GameTeamRound>
{
public void Override(AutoMapping<GameTeamRound> mapping)
{
//mapping.IgnoreProperty(gtr => gtr.Id);
mapping.CompositeId(gtr => gtr.Id)
.KeyProperty(id => id.GameTeam.Id.Game.Id, "GameId")
.KeyProperty(id => id.GameTeam.Id.Team.Id, "TeamId")
.KeyProperty(id => id.RoundNumber, "RoundId");
}
}
我已经尝试过各种各样的事情。如果你能指出我正确的方向,那就太好了。:)
谢谢蒂姆