Entity Framework 4.1 - Code First: отношение «многие ко многим» - PullRequest
3 голосов
/ 27 апреля 2011

Я хочу построить такое отношение (зона находится в окрестности x других зон)

public class Zone
{
    public string Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<ZoneNeighourhood> ZoneNeighourhoods { get; set; }
}

public class ZoneNeighbourhood
{
    public virtual Zone Zone1 { get; set; }
    public virtual Zone Zone2 { get; set; }
}

К сожалению, это не сработает, потому что FK, сгенерированные EF, неверны ..Как я могу заставить такую ​​структуру работать?

Пример с 3 зонами: зона 1, зона 2, зона 3

зона 1 Neighours:

зона 2,Зона 3

Зона 2 Соседи:

Зона 1

Зона 3 Соседи:

Зона1

Любой совет?

Ответы [ 2 ]

9 голосов
/ 27 апреля 2011

Ваше отображение неверно.Вы создаете самоссылающуюся сущность, поэтому вам нужен отдельный набор для входящих и исходящих отношений.Одной коллекции недостаточно.

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    [InverseProperty("NeighbourOf")]
    public virtual ICollection<Zone> NeighbourTo { get; set; }
    [InverseProperty("NeighbourTo")]
    public virtual ICollection<Zone> NeighbourOf { get; set; }
}

Вам не нужно отображать соединительную таблицу, если вы также не хотите добавить некоторые дополнительные свойства в отношение.

Если вы хотите только одну коллекциюнеобходимо использовать свободное отображение:

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

public class Context : DbContext
{
    public DbSet<Zone> Zones { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Zone>()
                    .HasMany(z => z.Neighbours)
                    .WithMany();
    }
}
1 голос
/ 27 апреля 2011

Дейв,

Как насчет просто:

public class Zone {
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

Или я что-то упустил?Вам НУЖНО смоделировать окрестности как внешнюю сущность по какой-то другой причине?Интересно, какую схему базы данных сгенерирует Entity-Framework для этого ... Я НЕ эксперт, на самом деле я нуб в этой области.Я не думаю, что у него есть проблема с самообращающимися таблицами, подобными этой ... по крайней мере, ничего из того, что я читал до сих пор, указывает на это.Давайте попробуем это и узнаем; -)

Ура.Кит.

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