我目前正在测试EntityFramework 4.1。
我的问题是,我有一个Team类和一个Game类。
class Team {
string Name { get; set; }
}
class Game {
Team HomeTeam { get; set; }
Team AwayTeam { get; set; }
}
还没有找到一种方法来映射这个。我已经设法使用NHibernate这样做,但没有运气与EF。有什么指针吗?
答案 0 :(得分:1)
这是我干净利落的地图:
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。如果你想将它们从消费代码中隐藏起来,你可以将它们保留在内部。