Это карты чисто для меня:
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, вы будете знать, что каскадирование обоих приведет к циклам.
РЕДАКТИРОВАТЬ: я думаю, я должен включить мои POCO:
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; }
}
Обратите внимание, что у вас ДОЛЖНЫ быть какие-то ключи в ваших POCO, следовательно, вам нужны HomeTeamName и AwayTeamName. Вы можете оставить их внутренними, если хотите скрыть их от потребляющего кода.