Проблема с ассоциацией при использовании EntityFramework - PullRequest
0 голосов
/ 05 апреля 2011

Я сейчас тестирую EntityFramework 4.1.

Моя проблема в том, что у меня есть класс Team и класс Game.

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

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

Все еще не нашли способ отобразить это,Мне удалось сделать это с помощью NHibernate, но не повезло с EF.Есть указатели?

1 Ответ

1 голос
/ 05 апреля 2011

Это карты чисто для меня:

    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. Вы можете оставить их внутренними, если хотите скрыть их от потребляющего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...