У меня есть две сущности с отношениями многие ко многим, например:

class author
{
  public int AuthorID{get;set;}
  public string Name{get;set;}
  public virtual ICollection<book> books{get;set;}
}
class book
{
  public int BookID{get;set;}
  public string Name{get;set;}
 public virtual ICollection<author> authors{get;set;}

}

И у меня есть промежуточная таблица с именем Bookauthor, определенная следующим образом:

  BookAuthor: int
  int AuthorID
  int BookID

Как отобразить это с помощью FluentAPI

Благодарность!!

5
user342552 6 Апр 2011 в 08:58

2 ответа

Лучший ответ

Это было проблематично с EDMX, но с API-интерфейсом EF 4.1. вы можете сопоставить его :

modelBuilder.Entity<book>()
            .HasMany(b => b.authors)
            .WithMany(a => a.books)
            .Map(m => m.MapLeftKey("BookID")
                   .MapRightKey("AuthorID")
                   .ToTable("BookAuthor"));

Как видите, я не отображаю столбец BookAuthor. Этот столбец неизвестен EF и должен увеличиваться автоматически.

Очевидно, что это не может работать с подходом Code-first, но только если вы используете Fluent API для существующей базы данных.

8
Ladislav Mrnka 7 Апр 2011 в 00:44
Это работает? В самом деле? с каким условием? 4.1 не заботится о переопределении OnModelCreating. Я действительно живу в шоке. ToTable ("BookAuthor") не создает таблицу, которую вызывает BookAuthor.
 – 
Nuri YILMAZ
19 Авг 2011 в 17:31

Я не думаю, что EF позволяет иметь отдельный идентификатор в таблицах соединений «многие ко многим».

Альтернативой является отображение BookAuthor как объекта.

Кстати, NHibernate поддерживает эту конструкцию с помощью idbag

0
Diego Mijelshon 6 Апр 2011 в 16:32