這是乾淨的地圖我:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Team>().HasKey(t => t.Name);
modelBuilder.Entity<Game>().HasKey(
g => new { g.AwayTeamName, g.HomeTeamName });
modelBuilder.Entity<Game>()
.HasRequired(g => g.HomeTeam)
.WithMany()
.HasForeignKey(g => g.HomeTeamName)
.WillCascadeOnDelete(true);
modelBuilder.Entity<Game>()
.HasRequired(g => g.AwayTeam)
.WithMany()
.HasForeignKey(g => g.AwayTeamName)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
請注意,你不能既級聯PK/FK關係。如果你在NHib中取得成功,你會知道級聯兩者都會導致循環。
編輯:我想我應該有我的波蘇斯:
public class Team
{
public string Name { get; set; }
}
public class Game
{
internal string HomeTeamName { get; set; }
public Team HomeTeam { get; set; }
internal string AwayTeamName { get; set; }
public Team AwayTeam { get; set; }
}
注意,您必須有某種關鍵的您波蘇斯,因此需要對HomeTeamName和AwayTeamName。如果您想將其隱藏在使用代碼中,則可以將它們保留在內部。
我在遊戲和團隊中使用了Id ...並使用了HomeTeamId和AwayTeamId。不過,謝謝。 只有一個問題,通過使用這個我不允許有一個遊戲與HomeTeam和AwayTeam相同嗎?因爲我將HomeTeamName和AwayTeamName設置爲遊戲的關鍵字。 – 2011-04-07 19:40:01
在上面的代碼中沒有任何東西可以阻止你使主隊和客隊相同。您需要爲您的POCO或系統中的其他層添加驗證邏輯。 – anon 2011-04-08 02:51:19