我有兩個表格,分別命名爲Teams
和Matches
- 我希望能夠添加由2個團隊組成的Match
,但也能夠獲得特定Team
的所有匹配。架構 - 2個外鍵到相同的主鍵?
什麼我可以做的是:
A)做一個多到許多
Teams
和Matches
表B)請在
Matches
兩個額外的列之間的關係 表名爲HomeTeam
和AwayTeam
這是外鍵 指的是Teams
中的團隊表。
我們都同意這一點乙聲音最好的,因爲我知道球隊的確切數額將參加比賽,每次 - 對嗎?現在
,當談到申報我的實體這種關係,那麼我就需要有2個多到一個關係到Match
實體,因爲Match
實體有指Team
2個外鍵 - 和正弦外鍵的數量/引用必須從兩個Match
和Team
一樣,那麼我會擁有這樣的:
// Team.cs
public class Team
{
public virtual int ID { get; private set; }
public virtual string TeamName { get; set; }
public virtual Cup Cup { get; set; }
public virtual IList<Match> HomeMatches { get; set; }
public virtual IList<Match> AwayMatches { get; set; }
public virtual IList<Match> Matches
{
get { return HomeMatches.Concat(AwayMatches).ToList(); }
}
public Team()
{
HomeMatches = new List<Match>();
AwayMatches = new List<Match>();
}
}
public class TeamMap : ClassMap<Team>
{
public TeamMap()
{
Id(x => x.ID);
Map(x => x.TeamName).Not.Nullable();
References(x => x.Cup, "CupID");
HasMany(x => x.HomeMatches).KeyColumn("HomeTeamID").Inverse().Cascade.AllDeleteOrphan();
HasMany(x => x.AwayMatches).KeyColumn("AwayTeamID").Inverse().Cascade.AllDeleteOrphan();
Table("Teams");
}
}
// Match.cs
public class Match
{
public virtual int ID { get; private set; }
public virtual Team HomeTeam { get; set; }
public virtual Team AwayTeam { get; set; }
public virtual int WinnerID { get; set; }
public virtual Cup Cup { get; set; }
}
public class MatchMap : ClassMap<Match>
{
public MatchMap()
{
Id(x => x.ID);
Map(x => x.WinnerID);
References(x => x.HomeTeam, "HomeTeamID");
References(x => x.AwayTeam, "AwayTeamID");
References(x => x.Cup, "CupID");
Table("Matches");
}
}
由於代碼顯示,那麼我將不得不使用.Concat()
合併HomeMatches和AwayMatches對於一個團隊,讓所有的比賽爲特定團隊..
這真的是最好的方式?
這就是我的想法太開始......但我發現錯了有一個多一對多的關係時,只有2支球隊可以參加比賽 - 與一個多TO-許多我需要重新發明輪子,並找出如何處理這種情況... – ebb 2011-03-08 15:07:37
確切地說,這就是爲什麼我認爲你已經有「最好」的方式顯示。 – Keith 2011-03-08 15:24:18
我猜我的球迷是否.Concat()是一個性能缺陷,當我必須合併主隊和客隊比賽時,球隊已經玩了。 – ebb 2011-03-08 15:57:53