使用EntityFramework时的关联问题

时间:2011-04-05 03:52:32

标签: entity-framework-4

我目前正在测试EntityFramework 4.1。

我的问题是,我有一个Team类和一个Game类。

class Team {
    string Name { get; set; }
}

class Game {
     Team HomeTeam { get; set; }
     Team AwayTeam { get; set; }
}

还没有找到一种方法来映射这个。我已经设法使用NHibernate这样做,但没有运气与EF。有什么指针吗?

1 个答案:

答案 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。如果你想将它们从消费代码中隐藏起来,你可以将它们保留在内部。