однонаправленные отношения «многие ко многим» с Code First Entity Framework - PullRequest
20 голосов
/ 15 ноября 2011

Я новичок в EF и пытаюсь получить однонаправленные отношения «многие ко многим» с помощью подхода «сначала код». Например, если у меня есть следующие два класса (а не моя настоящая модель) с отношением N * N между ними, но без свойства навигации со стороны "Заказчик".

public class User {
   public int UserId { get; set; }
   public string Email { get; set; }
   public ICollection TaggedCustomers { get; set; }
}
public class Customer {
  public int CustomerId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

Код отображения выглядит как ...

modelBuilder.Entity()
        .HasMany(r => r.TaggedCustomers)
        .WithMany(c => c.ANavgiationPropertyWhichIDontWant)
        .Map(m =>
        {
            m.MapLeftKey("UserId");
                m.MapRightKey("CustomerId");
                m.ToTable("BridgeTableForCustomerAndUser");
        });

Этот синтаксис заставляет меня иметь «WithMany» для сущности «Клиент». Следующий url гласит: «По договоренности, Code First всегда интерпретирует однонаправленное отношение как один-ко-многим».

Можно ли это переопределить, или я должен использовать любой другой подход?

1 Ответ

37 голосов
/ 15 ноября 2011

Используйте это:

public class User {
    public int UserId { get; set; }
    public string Email { get; set; }
    // You must use generic collection
    public virtual ICollection<Customer> TaggedCustomers { get; set; }
}

public class Customer {
    public int CustomerId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

И сопоставьте это с:

modelBuilder.Entity<User>()
    .HasMany(r => r.TaggedCustomers)
    .WithMany() // No navigation property here
    .Map(m =>
        {
            m.MapLeftKey("UserId");
            m.MapRightKey("CustomerId");
            m.ToTable("BridgeTableForCustomerAndUser");
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...