私は数時間、以下を機能させようとしています。しかし、ここで何が間違っているのかを見つけることができないようです。
この構造を機能させるために、Fluent Nhibernate automapper (およびいくつかのオーバーライド) を使用しています。
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");
}
}
私はいろいろなことを試しました。あなたが私を正しい方向に向けることができれば、それは素晴らしいことです. :)
ありがとうティム