这是干净的地图我:
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